Sdílet prostřednictvím


Nové funkce data a času s předchozími verzemi SQL Serveru (OLE DB)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed InstanceAzure Synapse AnalyticsPlatform Platform System (PDW)

Toto téma popisuje očekávané chování, když klient, který používá rozšířené funkce data a času, komunikuje s verzí SQL Serveru starší než SQL Server 2008 (10.0.x) a když klient zkompilovaný s verzí nativního klienta SQL Serveru starší než SQL Server 2008 (10.0.x) odesílá příkazy na server, který podporuje vylepšené funkce data a času.

Chování klienta Down-Level

Klientské aplikace, které používají verzi nativního klienta SQL Serveru starší než SQL Server 2008 (10.0.x), uvidí nové typy data a času jako nvarchar sloupců. Obsah sloupce jsou literální reprezentace. Další informace naleznete v části "Formáty dat: Řetězce a literály" Podpora datových typů ole DB vylepšení data a času. Velikost sloupce je maximální délka literálu pro přesnost určenou pro sloupec.

Rozhraní API katalogu vrátí metadata konzistentní s kódem datového typu nižší úrovně vráceným klientovi (například nvarchar) a přidruženou reprezentací nižší úrovně (například odpovídající formát literálu). Vrácený název datového typu však bude skutečným názvem typu SQL Server 2008 (10.0.x).

Pokud klientská aplikace nižší úrovně běží na serveru SQL Server 2008 (10.0.x) (nebo novějším), na kterém byly provedeny změny schématu typů data a času, očekávané chování je následující:

Typ klienta OLE DB Typ SQL Serveru 2005 Typ SQL Serveru 2008 (nebo novější) Převod výsledků (server na klienta) Převod parametrů (klient na server)
DBTYPE_DBDATE Datum a čas Rande OK OK
DBTYPE_DBTIMESTAMP Časová pole nastavená na nulu IRowsetChange selže kvůli zkrácení řetězce, pokud je pole času nenulové.
DBTYPE_DBTIME Time(0) OK OK
DBTYPE_DBTIMESTAMP Pole kalendářních dat nastavená na aktuální datum IRowsetChange selže kvůli zkrácení řetězce, pokud jsou zlomkové sekundy nenulové.

Datum se ignoruje.
DBTYPE_DBTIME Time(7) Selhání – neplatný časový literál. OK
DBTYPE_DBTIMESTAMP Selhání – neplatný časový literál. OK
DBTYPE_DBTIMESTAMP Datetime2(3) OK OK
DBTYPE_DBTIMESTAMP Datetime2(7) OK OK
DBTYPE_DBDATE Smalldatetime Rande OK OK
DBTYPE_DBTIMESTAMP Časová pole nastavená na nulu IRowsetChange selže kvůli zkrácení řetězce, pokud je pole času nenulové.
DBTYPE_DBTIME Time(0) OK OK
DBTYPE_DBTIMESTAMP Pole kalendářních dat nastavená na aktuální datum IRowsetChange selže kvůli zkrácení řetězce, pokud jsou zlomkové sekundy nenulové.

Datum se ignoruje.
DBTYPE_DBTIMESTAMP Datetime2(0) OK OK

OK znamená, že pokud fungoval s SQL Serverem 2005 (9.x), měl by i nadále fungovat s SQL Serverem 2008 (10.0.x) (nebo novějším).

Zvažovaly se pouze následující běžné změny schématu:

  • Použití nového typu, kde aplikace logicky vyžaduje pouze hodnotu data nebo času. Aplikace však musela používat datetime nebo smalldatetime, protože samostatné typy data a času nebyly k dispozici.

  • Pomocí nového typu získáte další přesnost nebo přesnost desetinné sekundy.

  • Přechod na datetime2, protože se jedná o upřednostňovaný datový typ pro datum a čas.

Aplikace, které používají metadata serveru získaná prostřednictvím ICommandWithParameters::GetParameterInfo nebo sady řádků schématu k nastavení informací o typu parametru prostřednictvím ICommandWithParameters::SetParameterInfo selžou během převodů klientů, kde řetězcová reprezentace zdrojového typu je větší než řetězcová reprezentace cílového typu. Pokud například vazba klienta používá DBTYPE_DBTIMESTAMP a sloupec serveru je datum, SQL Server Native Client převede hodnotu na "yyyy-dd-mm hh:mm:ss.fff", ale metadata serveru budou vrácena jako nvarchar(10). Výsledný přetečení způsobí DBSTATUS_E_CANTCONVERTVALUE. Podobné problémy vznikají při převodech dat pomocí IRowsetChange, protože metadata sady řádků jsou nastavena z metadat sady výsledků.

Metadata sady parametrů a sady řádků

Tato část popisuje metadata pro parametry, sloupce výsledků a sady řádků schématu pro klienty, kteří jsou zkompilovány s verzí sql Server Native Client starší než SQL Server 2008 (10.0.x).

ICommandWithParameters::GetParameterInfo

Struktura DBPARAMINFO vrátí následující informace prostřednictvím prgParamInfo parametru:

Typ parametru wType ulParamSize bPrecision bScale
rande DBTYPE_WSTR 10 ~0 ~0
Čas DBTYPE_WSTR 8, 10..16 ~0 ~0
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0
datetime DBTYPE_DBTIMESTAMP 16 23 3
datetime2 DBTYPE_WSTR 19,21..27 ~0 ~0
datetimeoffset DBTYPE_WSTR 26,28..34 ~0 ~0

Všimněte si, že některé z těchto rozsahů hodnot nejsou souvislé; Například 9 chybí v 8 10..16. Důvodem je sčítání desetinné čárky, pokud je desetinná přesnost větší než nula.

IColumnsRowset::GetColumnsRowset

Vrátí se následující sloupce:

Typ sloupce DBCOLUMN_TYPE DBCOLUMN_COLUMNSIZE DBCOLUMN_PRECISION DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION
rande DBTYPE_WSTR 10 NULA NULA
Čas DBTYPE_WSTR 8, 10..16 NULA NULA
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0
datetime DBTYPE_DBTIMESTAMP 16 23 3
datetime2 DBTYPE_WSTR 19,21..27 NULA NULA
datetimeoffset DBTYPE_WSTR 26,28..34 NULA NULA

ColumnsInfo::GetColumnInfo

Struktura DBCOLUMNINFO vrátí následující informace:

Typ parametru wType ulColumnSize bPrecision bScale
rande DBTYPE_WSTR 10 ~0 ~0
time(1..7) DBTYPE_WSTR 8, 10..16 ~0 ~0
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0
datetime DBTYPE_DBTIMESTAMP 16 23 3
datetime2 DBTYPE_WSTR 19,21..27 ~0 ~0
datetimeoffset DBTYPE_WSTR 26,28..34 ~0 ~0

Sady řádků schématu

Tato část popisuje metadata pro parametry, sloupce výsledků a sady řádků schématu pro nové datové typy. Tyto informace jsou užitečné, když máte poskytovatele klienta vyvinutého pomocí nástrojů starších než SQL Server 2008 (10.0.x) SQL Server Native Client.

Sada řádků SLOUPCŮ

Pro typy data a času se vrátí následující hodnoty sloupců:

Typ sloupce DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH DATETIME_PRECISION
rande DBTYPE_WSTR 10 20 NULA
Čas DBTYPE_WSTR 8, 10..16 16,20..32 NULA
smalldatetime DBTYPE_DBTIMESTAMP NULA NULA 0
datetime DBTYPE_DBTIMESTAMP NULA NULA 3
datetime2 DBTYPE_WSTR 19,21..27 38,42..54 NULA
datetimeoffset DBTYPE_WSTR 26,28..34 52, 56..68 NULA

sada řádků PROCEDURE_PARAMETERS

Pro typy data a času se vrátí následující hodnoty sloupců:

Typ sloupce DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH TYPE_NAME

LOCAL_TYPE_NAME
rande DBTYPE_WSTR 10 20 rande
Čas DBTYPE_WSTR 8, 10..16 16,20..32 Čas
smalldatetime DBTYPE_DBTIMESTAMP NULA NULA smalldatetime
datetime DBTYPE_DBTIMESTAMP NULA NULA datetime
datetime2 DBTYPE_WSTR 19,21..27 38,42..54 datetime2
datetimeoffset DBTYPE_WSTR 26,28..34 52, 56..68 datetimeoffset

sada řádků PROVIDER_TYPES

Následující řádky se vrátí pro typy data a času:

Typ –>

Sloupec
rande Čas smalldatetime datetime datetime2 datetimeoffset
TYPE_NAME rande Čas smalldatetime datetime datetime2 datetimeoffset
DATA_TYPE DBTYPE_WSTR DBTYPE_WSTR DBTYPE_DBTIMESTAMP DBTYPE_DBTIMESTAMP DBTYPE_WSTR DBTYPE_WSTR
COLUMN_SIZE 10 16 16 23 27 34
LITERAL_PREFIX ' ' ' ' ' '
LITERAL_SUFFIX ' ' ' ' ' '
CREATE_PARAMS NULA NULA NULA NULA NULA NULA
IS_NULLABLE VARIANT_TRUE VARIANT_TRUE VARIANT_TRUE VARIANT_TRUE VARIANT_TRUE VARIANT_TRUE
CASE_SENSITIVE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE
PROHLEDÁVATELNÝ DB_SEARCHABLE DB_SEARCHABLE DB_SEARCHABLE DB_SEARCHABLE DB_SEARCHABLE DB_SEARCHABLE
UNSIGNED_ATTRIBUTE NULA NULA NULA NULA NULA NULA
FIXED_PREC_SCALE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE
AUTO_UNIQUE_VALUE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE
LOCAL_TYPE_NAME rande Čas smalldatetime datetime datetime2 datetimeoffset
MINIMUM_SCALE NULA NULA NULA NULA NULA NULA
MAXIMUM_SCALE NULA NULA NULA NULA NULA NULA
Identifikátor guid NULA NULA NULA NULA NULA NULA
TYPELIB NULA NULA NULA NULA NULA NULA
VERZE NULA NULA NULA NULA NULA NULA
IS_LONG VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE
BEST_MATCH VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_TRUE VARIANT_FALSE VARIANT_FALSE
IS_FIXEDLENGTH VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE VARIANT_FALSE

Chování serveru Down-Level

Pokud jste připojení k serveru starší verze než SQL Server 2008 (10.0.x), všechny pokusy o použití nových názvů typů serveru (například s ICommandWithParameters::SetParameterInfo nebo ITableDefinition::CreateTable) způsobí DB_E_BADTYPENAME.

Pokud jsou nové typy vázané na parametry nebo výsledky bez použití názvu typu a nový typ se použije k implicitnímu zadání typu serveru nebo neexistuje platný převod typu serveru na typ klienta, DB_E_ERRORSOCCURRED se vrátí a DBBINDSTATUS_UNSUPPORTED_CONVERSION je nastaven jako stav vazby pro příslušenství použitého při spuštění.

Pokud existuje podporovaný převod klienta z typu vyrovnávací paměti na typ serveru pro verzi serveru v připojení, lze použít všechny typy vyrovnávací paměti klienta. V tomto kontextu typ serveru znamená typ zadaný ICommandWithParameters::SetParameterInfo nebo odvozený typem vyrovnávací paměti, pokud ICommandWithParameters::SetParameterInfo nebyl volána. To znamená, že DBTYPE_DBTIME2 a DBTYPE_DBTIMESTAMPOFFSET se dají použít se servery nižší úrovně nebo když dataTypeCompatibility=80, pokud je převod klienta na podporovaný typ serveru úspěšný. Pokud je samozřejmě typ serveru nesprávný, může být serverem stále hlášena chyba, pokud nemůže provést implicitní převod na skutečný typ serveru.

chování SSPROP_INIT_DATATYPECOMPATIBILITY

Pokud je SSPROP_INIT_DATATYPECOMPATIBILITY nastavena na SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000, nové typy data a času a přidružená metadata se klientům zobrazují tak, jak se zobrazují pro klienty nižší úrovně, jak je popsáno v Hromadné kopírování změn pro rozšířené typy data a času (OLE DB a ODBC).

Porovnatelnost pro IRowsetFind

Pro nové typy data a času jsou povolené všechny relační operátory, protože se zobrazují jako typy řetězců, nikoli jako typy data a času.

Viz také

vylepšení data a času (OLE DB)