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í