Nya datum- och tidsfunktioner med tidigare SQL Server-versioner (OLE DB)

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

Det här avsnittet beskriver det förväntade beteendet när ett klientprogram som använder förbättrade datum- och tidsfunktioner kommunicerar med en version av SQL Server tidigare än SQL Server 2008 (10.0.x) och när en klient som kompilerats med en version av SQL Server Native Client tidigare än SQL Server 2008 (10.0.x) skickar kommandon till en server som stöder förbättrade datum- och tidsfunktioner.

Down-Level klientbeteende

Klientprogram som använder en version av SQL Server Native Client tidigare än SQL Server 2008 (10.0.x) ser de nya datum-/tidstyperna som nvarchar kolumner. Kolumninnehållet är literala representationer. Mer information finns i avsnittet "Dataformat: Strängar och literaler" i stöd för datatyp för OLE DB-datum- och tidsförbättringar. Kolumnstorleken är den maximala literallängden för den precision som anges för kolumnen.

Katalog-API:er returnerar metadata som är konsekventa med den datatypskod på nednivå som returneras till klienten (till exempel nvarchar) och den associerade representationen på nednivå (till exempel lämpligt literalformat). Det datatypnamn som returneras är dock det riktiga SQL Server 2008-typnamnet (10.0.x).

När ett klientprogram på nednivå körs mot en SQL Server 2008-server (10.0.x) (eller senare) där schemaändringar av datum/tid-typer har gjorts, är det förväntade beteendet följande:

OLE DB-klienttyp SQL Server 2005-typ SQL Server 2008 (eller senare) typ Resultatkonvertering (server till klient) Parameterkonvertering (klient till server)
DBTYPE_DBDATE Datetime Datum OKEJ OKEJ
DBTYPE_DBTIMESTAMP Tidsfälten är inställda på noll. IRowsetChange misslyckas på grund av strängtrunkering om tidsfältet inte är noll.
DBTYPE_DBTIME Tid(0) OKEJ OKEJ
DBTYPE_DBTIMESTAMP Datumfält som är inställda på aktuellt datum. IRowsetChange misslyckas på grund av strängtrunkering om bråksekunderna inte är noll.

Datum ignoreras.
DBTYPE_DBTIME Tid(7) Misslyckas – ogiltig tidsliteral. OKEJ
DBTYPE_DBTIMESTAMP Misslyckas – ogiltig tidsliteral. OKEJ
DBTYPE_DBTIMESTAMP Datetime2(3) OKEJ OKEJ
DBTYPE_DBTIMESTAMP Datetime2(7) OKEJ OKEJ
DBTYPE_DBDATE Smalldatetime Datum OKEJ OKEJ
DBTYPE_DBTIMESTAMP Tidsfälten är inställda på noll. IRowsetChange misslyckas på grund av strängtrunkering om tidsfältet inte är noll.
DBTYPE_DBTIME Tid(0) OKEJ OKEJ
DBTYPE_DBTIMESTAMP Datumfält som är inställda på aktuellt datum. IRowsetChange misslyckas på grund av strängtrunkering om bråksekunderna inte är noll.

Datum ignoreras.
DBTYPE_DBTIMESTAMP Datetime2(0) OKEJ OKEJ

OK innebär att om det fungerade med SQL Server 2005 (9.x) bör det fortsätta att fungera med SQL Server 2008 (10.0.x) (eller senare).

Endast följande vanliga schemaändringar har övervägts:

  • Använd en ny typ där ett program logiskt bara kräver ett datum- eller tidsvärde. Programmet tvingades dock använda datetime- eller smalldatetime- eftersom separata datum- och tidstyper inte var tillgängliga.

  • Använda en ny typ för att få ytterligare precision eller noggrannhet i bråksekunder.

  • Växla till datetime2 eftersom det här är den önskade datatypen för datum och tid.

Program som använder servermetadata som hämtas via ICommandWithParameters::GetParameterInfo eller schemaraduppsättningar för att ange information om parametertyp via ICommandWithParameters::SetParameterInfo misslyckas under klientkonverteringar där strängrepresentationen av en källtyp är större än strängrepresentationen av måltypen. Om en klientbindning till exempel använder DBTYPE_DBTIMESTAMP och serverkolumnen är datum konverterar SQL Server Native Client värdet till "åååå–dd-mm hh:mm:ss.fff", men servermetadata returneras som nvarchar(10). Det resulterande spillet orsakar DBSTATUS_E_CANTCONVERTVALUE. Liknande problem uppstår med datakonverteringar av IRowsetChange, eftersom metadata för raduppsättningen anges från metadata för resultatuppsättningen.

Metadata för parametern och raduppsättningen

I det här avsnittet beskrivs metadata för parametrar, resultatkolumner och schemarader för klienter som kompileras med en version av SQL Server Native Client tidigare än SQL Server 2008 (10.0.x).

ICommandWithParameters::GetParameterInfo

DBPARAMINFO-strukturen returnerar följande information via parametern prgParamInfo:

Parametertyp wType ulParamSize bFörberedelse bSkala
datum DBTYPE_WSTR 10 ~0 ~0
Tid 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

Observera att vissa av dessa värdeintervall inte är kontinuerliga. Till exempel saknas 9 i 8,10..16. Detta beror på att en decimalpunkt läggs till när bråkprecisionen är större än noll.

IColumnsRowset::GetColumnsRowset

Följande kolumner returneras:

Kolumntyp DBCOLUMN_TYPE DBCOLUMN_COLUMNSIZE DBCOLUMN_PRECISION DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION
datum DBTYPE_WSTR 10 NOLL NOLL
Tid DBTYPE_WSTR 8, 10..16 NOLL NOLL
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0
datetime DBTYPE_DBTIMESTAMP 16 23 3
datetime2 DBTYPE_WSTR 19,21..27 NOLL NOLL
datetimeoffset DBTYPE_WSTR 26,28..34 NOLL NOLL

ColumnsInfo::GetColumnInfo

DBCOLUMNINFO-strukturen returnerar följande information:

Parametertyp wType ulColumnSize bFörberedelse bSkala
datum 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

Schemarader

I det här avsnittet beskrivs metadata för parametrar, resultatkolumner och schemarader för nya datatyper. Den här informationen är användbar om du har en klientprovider utvecklad med verktyg tidigare än SQL Server 2008 (10.0.x) SQL Server Native Client.

RADERUPPSÄTTNING FÖR KOLUMNER

Följande kolumnvärden returneras för datum-/tidstyper:

Kolumntyp DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH DATETIME_PRECISION
datum DBTYPE_WSTR 10 20 NOLL
Tid DBTYPE_WSTR 8, 10..16 16,20..32 NOLL
smalldatetime DBTYPE_DBTIMESTAMP NOLL NOLL 0
datetime DBTYPE_DBTIMESTAMP NOLL NOLL 3
datetime2 DBTYPE_WSTR 19,21..27 38,42..54 NOLL
datetimeoffset DBTYPE_WSTR 26,28..34 52, 56..68 NOLL

PROCEDURE_PARAMETERS rader

Följande kolumnvärden returneras för datum-/tidstyper:

Kolumntyp DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH TYPE_NAME

LOCAL_TYPE_NAME
datum DBTYPE_WSTR 10 20 datum
Tid DBTYPE_WSTR 8, 10..16 16,20..32 Tid
smalldatetime DBTYPE_DBTIMESTAMP NOLL NOLL smalldatetime
datetime DBTYPE_DBTIMESTAMP NOLL NOLL datetime
datetime2 DBTYPE_WSTR 19,21..27 38,42..54 datetime2
datetimeoffset DBTYPE_WSTR 26,28..34 52, 56..68 datetimeoffset

PROVIDER_TYPES rader

Följande rader returneras för datum-/tidstyper:

Typ –>

Spalt
datum Tid smalldatetime datetime datetime2 datetimeoffset
TYPE_NAME datum Tid 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 NOLL NOLL NOLL NOLL NOLL NOLL
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
SÖKBAR DB_SEARCHABLE DB_SEARCHABLE DB_SEARCHABLE DB_SEARCHABLE DB_SEARCHABLE DB_SEARCHABLE
UNSIGNED_ATTRIBUTE NOLL NOLL NOLL NOLL NOLL NOLL
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 datum Tid smalldatetime datetime datetime2 datetimeoffset
MINIMUM_SCALE NOLL NOLL NOLL NOLL NOLL NOLL
MAXIMUM_SCALE NOLL NOLL NOLL NOLL NOLL NOLL
GUID NOLL NOLL NOLL NOLL NOLL NOLL
TYPELIB NOLL NOLL NOLL NOLL NOLL NOLL
VERSION NOLL NOLL NOLL NOLL NOLL NOLL
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

Down-Level serverbeteende

När du är ansluten till en server med en tidigare version än SQL Server 2008 (10.0.x) resulterar alla försök att använda de nya servertypsnamnen (till exempel med ICommandWithParameters::SetParameterInfo eller ITableDefinition::CreateTable) i DB_E_BADTYPENAME.

Om nya typer är bundna till parametrar eller resultat utan användning av ett typnamn, och antingen används den nya typen för att implicit ange servertypen eller om det inte finns någon giltig konvertering från servertypen till klienttypen, DB_E_ERRORSOCCURRED returneras och DBBINDSTATUS_UNSUPPORTED_CONVERSION anges som bindningsstatus för den accessor som används vid Kör.

Om det finns en klientkonvertering som stöds från bufferttypen till servertypen för serverversionen på anslutningen kan alla klientbufferttyper användas. I det här sammanhanget innebär servertyp den typ som anges av ICommandWithParameters::SetParameterInfo, eller underförstådd av bufferttypen om ICommandWithParameters::SetParameterInfo inte har anropats. Det innebär att DBTYPE_DBTIME2 och DBTYPE_DBTIMESTAMPOFFSET kan användas med servrar på nednivå, eller när DataTypeCompatibility=80, om klientkonverteringen till en servertyp som stöds lyckas. Om servertypen är felaktig kan ett fel naturligtvis fortfarande rapporteras av servern om den inte kan utföra en implicit konvertering till den faktiska servertypen.

SSPROP_INIT_DATATYPECOMPATIBILITY beteende

När SSPROP_INIT_DATATYPECOMPATIBILITY är inställt på SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000 visas de nya datum-/tidstyperna och associerade metadata för klienter när de visas för klienter på nednivå, enligt beskrivningen i Masskopieringsändringar för utökade datum- och tidstyper (OLE DB och ODBC).

Jämförbarhet för IRowsetFind

Alla jämförelseoperatorer tillåts för de nya datum-/tidstyperna, eftersom de visas som strängtyper i stället för datum-/tidstyper.

Se även

förbättringar av datum och tid (OLE DB)