Dela via


Metadata – Parameter och raduppsättning i SQL Server Native Client

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Det här avsnittet innehåller information om följande typ- och typmedlemmar, relaterade till ole db-datum- och tidsförbättringarna.

  • DBBINDING-struktur

  • ICommandWithParameters::GetParameterInfo

  • ICommandWithParameters::SetParameterInfo

  • IColumnsRowset::GetColumnsRowset

  • IColumnsInfo::GetColumnInfo

ICommandWithParameters::GetParameterInfo

Följande information returneras i DBPARAMINFO-strukturen via prgParamInfo:

Parametertyp wType ulParamSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
datum DBTYPE_DBDATE 6 10 0 Klar
Tid DBTYPE_DBTIME2 10 8, 10..16 0..7 Ställa
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Klar
datetime DBTYPE_DBTIMESTAMP 16 23 3 Klar
datetime2 DBTYPE_DBTIMESTAMP 16 19,21..27 0..7 Ställa
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26,28..34 0..7 Ställa

Observera att värdeintervall i vissa fall inte är kontinuerliga. Detta beror på att en decimalpunkt läggs till när bråkprecisionen är större än noll.

DBPARAMFLAGS_SS_ISVARIABLESCALE är endast giltig när den är ansluten till en SQL Server 2008-server (10.0.x) (eller senare). DBPARAMFLAGS_SS_ISVARIABLESCALE ställs aldrig in när den är ansluten till servrar på nednivå.

ICommandWithParameters::SetParameterInfo och implicita parametertyper

Informationen i DBPARAMBINDINFO-strukturen måste överensstämma med följande:

pwszDataSourceType

(providerspecifik)
pwszDataSourceType

(ALLMÄNT OLE DB)
ulParamSize bScale
DBTYPE_DATE 6 Ignoreras
datum DBTYPE_DBDATE 6 Ignoreras
DBTYPE_DBTIME 10 Ignoreras
Tid DBTYPE_DBTIME2 10 0..7
smalldatetime 16 Ignoreras
datetime 16 Ignoreras
datetime2 eller DBTYPE_DBTIMESTAMP DBTYPE_DBTIMESTAMP 16 0..7
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 0..7

Parametern bPrecision ignoreras.

"DBPARAMFLAGS_SS_ISVARIABLESCALE" ignoreras när data skickas till servern. Program kan tvinga användning av äldre TDS-typer (tabular-data stream) med hjälp av de providerspecifika typnamnen "datetime" och "smalldatetime". När du är ansluten till SQL Server 2008-servrar (10.0.x) (eller senare) används formatet "datetime2" och en implicit serverkonvertering sker om det behövs när typnamnet är "datetime2" eller "DBTYPE_DBTIMESTAMP". bScale ignoreras om providerspecifika typnamn "datetime" eller "smalldatetime" används. Annars måste program se till att bScale- har angetts korrekt. Program som uppgraderas från MDAC och SQL Server Native Client från SQL Server 2005 (9.x) som använder "DBTYPE_DBTIMESTAMP" misslyckas om de inte anger bSkala korrekt. När du är ansluten till serverinstanser tidigare än SQL Server 2008 (10.0.x) är ett bSkala annat värde än 0 eller 3 med "DBTYPE_DBTIMESTAMP" ett fel och E_FAIL returneras.

När ICommandWithParameters::SetParameterInfo inte anropas antyder providern servertypen från bindningstypen enligt vad som anges i IAccessor::CreateAccessor enligt följande:

Bindningstyp pwszDataSourceType

(providerspecifik)
DBTYPE_DATE datetime2(0)
DBTYPE_DBDATE datum
DBTYPE_DBTIME time(0)
DBTYPE_DBTIME2 time(7)
DBTYPE_DBTIMESTAMP datetime2(7)
DBTYPE_DBTIMESTAMPOFFSET datetimeoffset(7)

IColumnsRowset::GetColumnsRowset

IColumnsRowset::GetColumnsRowset returnerar följande kolumner:

Kolumntyp DBCOLUMN_TYPE DBCOLUM_COLUMNSIZE DBCOLUMN_PRECISION DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE
datum DBTYPE_DBDATE 6 10 0 Klar
Tid DBTYPE_DBTIME2 10 8, 10..16 0..7 Ställa
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Klar
datetime DBTYPE_DBTIMESTAMP 16 23 3 Klar
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Ställa
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Ställa

I DBCOLUMN_FLAGS är DBCOLUMNFLAGS_ISFIXEDLENGTH alltid sant för datum-/tidstyper och följande flaggor är alltid falska:

  • DBCOLUMNFLAGS_CACHEDEFERRED

  • DBCOLUMNFLAGS_ISBOOKMARK

  • DBCOLUMNFLAGS_ISCHAPTER

  • DBCOLUMNFLAGS_ISLONG

  • DBCOLUMNFLAGS_ISROWID

  • DBCOLUMNFLAGS_ISROWVER

  • DBCOLUMNFLAGS_MAYDEFER

Återstående flaggor (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE och DBCOLUMNFLAGS_WRITEUNKNOWN) kan anges, beroende på hur kolumnen definieras och den faktiska frågan.

En ny flagga DBCOLUMNFLAGS_SS_ISVARIABLESCALE finns i DBCOLUMN_FLAGS så att ett program kan fastställa servertypen för kolumner, där DBCOLUMN_TYPE är DBTYPE_DBTIMESTAMP. DBCOLUMN_SCALE eller DBCOLUMN_DATETIMEPRECISION måste också användas för att identifiera servertypen.

DBCOLUMNFLAGS_SS_ISVARIABLESCALE är endast giltig när den är ansluten till en SQL Server 2008-server (10.0.x) (eller senare). DBCOLUMNFLAGS_SS_ISVARIABLESCALE är odefinierat när det är anslutet till servrar på nednivå.

IColumnsInfo::GetColumnInfo

DBCOLUMNINFO-strukturen returnerar följande information:

Parametertyp wType ulColumnSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
datum DBTYPE_DBDATE 6 10 0 Klar
time(1..7) DBTYPE_DBTIME2 10 8, 10..16 0..7 Ställa
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Klar
datetime DBTYPE_DBTIMESTAMP 16 23 3 Klar
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Ställa
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Ställa

I dwFlagsär DBCOLUMNFLAGS_ISFIXEDLENGTH alltid sant för datum/tid-typer och följande flaggor är alltid falska:

  • DBCOLUMNFLAGS_CACHEDEFERRED

  • DBCOLUMNFLAGS_ISBOOKMARK

  • DBCOLUMNFLAGS_ISCHAPTER

  • DBCOLUMNFLAGS_ISLONG

  • DBCOLUMNFLAGS_ISROWID

  • DBCOLUMNFLAGS_ISROWVER, MAYDEFER

Återstående flaggor (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE och DBCOLUMNFLAGS_WRITEUNKNOWN) kan anges.

En ny flagga DBCOLUMNFLAGS_SS_ISVARIABLESCALE finns i dwFlags så att ett program kan fastställa servertypen för kolumner, där wType är DBTYPE_DBTIMESTAMP. bScale måste också användas för att identifiera servertypen.

Se även

metadata (OLE DB)