Metadata – parametr a sada řádků v nativním klientovi SQL Serveru
platí pro:SQL ServerAzure SQL Databaseazure SQL Managed InstanceAzure Synapse AnalyticsPlatform Platform System (PDW)
Toto téma obsahuje informace o následujícím typu a členech typů, které souvisejí s vylepšeními data a času OLE DB.
DBBINDING – struktura
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
Následující informace se vrátí ve struktuře DBPARAMINFO prostřednictvím prgParamInfo:
Typ parametru | wType | ulParamSize | bPrecision | bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
rande | DBTYPE_DBDATE | 6 | 10 | 0 | Jasný |
Čas | DBTYPE_DBTIME2 | 10 | 8, 10..16 | 0..7 | Nastavit |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Jasný |
datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Jasný |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19,21..27 | 0..7 | Nastavit |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26,28..34 | 0..7 | Nastavit |
Všimněte si, že v některých případech rozsahy hodnot nejsou souvislé. Důvodem je sčítání desetinné čárky, pokud je desetinná přesnost větší než nula.
DBPARAMFLAGS_SS_ISVARIABLESCALE je platný pouze při připojení k serveru SQL Server 2008 (10.0.x) (nebo novějším). DBPARAMFLAGS_SS_ISVARIABLESCALE se nikdy nenastaví při připojení k serverům nižší úrovně.
ICommandWithParameters::SetParameterInfo a implicitní typy parametrů
Informace uvedené ve struktuře DBPARAMBINDINFO musí odpovídat následujícímu:
pwszDataSourceType (konkrétní poskytovatel) |
pwszDataSourceType (OBECNÉ OLE DB) |
ulParamSize | bScale |
---|---|---|---|
DBTYPE_DATE | 6 | Ignorovaný | |
rande | DBTYPE_DBDATE | 6 | Ignorovaný |
DBTYPE_DBTIME | 10 | Ignorovaný | |
Čas | DBTYPE_DBTIME2 | 10 | 0..7 |
smalldatetime | 16 | Ignorovaný | |
datetime | 16 | Ignorovaný | |
datetime2 nebo DBTYPE_DBTIMESTAMP | DBTYPE_DBTIMESTAMP | 16 | 0..7 |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 0..7 |
Parametr bPrecision se ignoruje.
Při odesílání dat na server se ignoruje "DBPARAMFLAGS_SS_ISVARIABLESCALE". Aplikace můžou vynutit použití starších typů datových proudů tabulkových dat (TDS) pomocí názvů typů specifických pro zprostředkovatele "datetime" a "smalldatetime". Při připojení k serverům SQL Server 2008 (10.0.x) (nebo novější) se použije formát "datetime2" a v případě potřeby dojde k implicitní převodu serveru, pokud je název typu "datetime2" nebo "DBTYPE_DBTIMESTAMP". bScale se ignoruje, pokud se použijí názvy typů specifických pro poskytovateledatetime nebosmalldatetime. Jinak musí aplikace zajistit správné nastavení bScale. Aplikace upgradované z MDAC a nativního klienta SQL Serveru z SQL Serveru 2005 (9.x), které používají "DBTYPE_DBTIMESTAMP", selžou, pokud nenastaví bScale správně. Pokud jste připojení k instancím serveru starším než SQL Server 2008 (10.0.x), bScale jinou než 0 nebo 3 s hodnotou "DBTYPE_DBTIMESTAMP" je chyba a E_FAIL se vrátí.
Pokud ICommandWithParameters::SetParameterInfo není volána, poskytovatel implikuje typ serveru z typu vazby, jak je uvedeno v IAccessor::CreateAccessor následujícím způsobem:
Typ vazby |
pwszDataSourceType (konkrétní poskytovatel) |
---|---|
DBTYPE_DATE | datetime2(0) |
DBTYPE_DBDATE | rande |
DBTYPE_DBTIME | time(0) |
DBTYPE_DBTIME2 | time(7) |
DBTYPE_DBTIMESTAMP | datetime2(7) |
DBTYPE_DBTIMESTAMPOFFSET | datetimeoffset(7) |
IColumnsRowset::GetColumnsRowset
IColumnsRowset::GetColumnsRowset vrátí následující sloupce:
Typ sloupce | DBCOLUMN_TYPE | DBCOLUM_COLUMNSIZE | DBCOLUMN_PRECISION | DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION | DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
rande | DBTYPE_DBDATE | 6 | 10 | 0 | Jasný |
Čas | DBTYPE_DBTIME2 | 10 | 8, 10..16 | 0..7 | Nastavit |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Jasný |
datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Jasný |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19, 21..27 | 0..7 | Nastavit |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26, 28..34 | 0..7 | Nastavit |
V DBCOLUMN_FLAGS platí DBCOLUMNFLAGS_ISFIXEDLENGTH vždy pro typy data a času a následující příznaky jsou vždy false:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER
DBCOLUMNFLAGS_MAYDEFER
Zbývající příznaky (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE a DBCOLUMNFLAGS_WRITEUNKNOWN) je možné nastavit v závislosti na tom, jak je sloupec definovaný a jaký je skutečný dotaz.
V DBCOLUMN_FLAGS je k dispozici nový DBCOLUMNFLAGS_SS_ISVARIABLESCALE příznak, který aplikaci umožní určit typ serveru sloupců, kde DBCOLUMN_TYPE je DBTYPE_DBTIMESTAMP. DBCOLUMN_SCALE nebo DBCOLUMN_DATETIMEPRECISION musí být také použity k identifikaci typu serveru.
DBCOLUMNFLAGS_SS_ISVARIABLESCALE je platný pouze při připojení k serveru SQL Server 2008 (10.0.x) (nebo novějším). DBCOLUMNFLAGS_SS_ISVARIABLESCALE není definována při připojení k serverům nižší úrovně.
IColumnsInfo::GetColumnInfo
DbCOLUMNINFO vrátí následující informace:
Typ parametru | wType | ulColumnSize | bPrecision | bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
rande | DBTYPE_DBDATE | 6 | 10 | 0 | Jasný |
time(1..7) | DBTYPE_DBTIME2 | 10 | 8, 10..16 | 0..7 | Nastavit |
smalldatetime | DBTYPE_DBTIMESTAMP | 16 | 16 | 0 | Jasný |
datetime | DBTYPE_DBTIMESTAMP | 16 | 23 | 3 | Jasný |
datetime2 | DBTYPE_DBTIMESTAMP | 16 | 19, 21..27 | 0..7 | Nastavit |
datetimeoffset | DBTYPE_DBTIMESTAMPOFFSET | 20 | 26, 28..34 | 0..7 | Nastavit |
V dwFlags, DBCOLUMNFLAGS_ISFIXEDLENGTH vždy platí pro typy data a času a následující příznaky jsou vždy false:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER, MAYDEFER
Můžete nastavit zbývající příznaky (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE a DBCOLUMNFLAGS_WRITEUNKNOWN).
V