Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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.