Konverteringar som utförts från server till klient

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-databas i Microsoft Fabric

Ladda ned OLE DB-drivrutins

Denna artikel beskriver datum/tid-konverteringar som utförts mellan SQL Server 2008 (10.0.x) och senare versioner, samt en klientapplikation skriven med OLE DB Driver för SQL Server.

Conversions

Följande tabell beskriver konverteringar mellan typen som returneras till klienten och typen i bindningen. För utdataparametrar, om ICommandWithParameters::SetParameterInfo har anropats och typen som anges i pwszDataSourceType inte matchar den faktiska typen på servern, kommer en implicit konvertering att utföras av servern, och typen som returneras till klienten kommer att matcha typen som anges via ICommandWithParameters::SetParameterInfo. Detta kan leda till oväntade konverteringsresultat när serverns konverteringsregler skiljer sig från de som beskrivs i denna artikel. Till exempel, när ett standarddatum måste anges, använder SQL Server 1900-1-1 istället för 1899-12-30.

Till->

Från
DATE DBDATE DBTIME DBTIME2 DBTIMESTAMP DBTIMESTAMPOFFSET FILTID BYTE VARIANT SSVARIANT BSTR STR WSTR
Date 1, 7 OK - - 1 1, 3 1, 7 - Okej (VT_BSTR) OK OK 4 4
Time 5, 6, 7 - 9 OK 6 3, 6 5, 6 - Okej (VT_BSTR) OK OK 4 4
Smalldatetime 7 8 9, 10 10 OK 3 7 - 7 (VT_DATE) OK OK 4 4
Datum och tid 5, 7 8 9, 10 10 OK 3 7 - 7 (VT_DATE) OK OK 4 4
Datetime2 5, 7 8 9, 10 10 7 3 5, 7 - Okej (VT_BSTR) OK OK 4 4
Datumtidsförskjutning 5, 7, 11 8, 11 9, 10, 11 10, 11 7, 11 OK 5, 7, 11 - Okej (VT_BSTR) OK OK 4 4
Char, Varchar,

Nchar, Nvarchar
7, 13 12 12, 9 12 12 12 7, 13 N/A N/A N/A N/A N/A N/A
Sql_variant

(datumtid)
7 8 9, 10 10 OK 3 7 - 7(VT_DATE) OK OK 4 4
Sql_variant

(smådatetime)
7 8 9, 10 10 OK 3 7 - 7(VT_DATE) OK OK 4 4
Sql_variant

(datum)
1, 7 OK 2 2 1 1, 3 1, 7 - Okej(VT_BSTR) OK OK 4 4
Sql_variant

(tid)
5, 6, 7 2 6 OK 6 3, 6 5, 6 - Okej(VT_BSTR) OK OK 4 4
Sql_variant

(datum2)
5, 7 8 9, 10 10 OK 3 5, 7 - Okej(VT_BSTR) OK OK 4 4
Sql_variant

(datumtidförskjutning)
5, 7, 11 8, 11 9, 10, 11 10, 11 7, 11 OK 5, 7, 11 - Okej(VT_BSTR) OK OK 4 4

Nyckel till symboler

Symbol Meaning
OK Ingen konvertering är nödvändig.
- Ingen konvertering stöds. Om bindningen valideras när IAccessor::CreateAccessor anropas, returneras DBBINDSTATUS_UPSUPPORTEDCONVERSION i rgStatus. När validering av accessorer skjuts upp sätts DBSTATUS_E_BADACCESSOR.
1 Tidsfälten är inställda på noll.
2 DBSTATUS_E_CANTCONVERTVALUE är klar.
3 Tidszonen är inställd på noll.
4 Om klientbufferten inte är tillräckligt stor är DBSTATUS_S_TRUNCATED satt. När servertypen inkluderar bråkdelar av sekunder motsvarar antalet siffror i resultatsträngen exakt servertypens skala.
5 Förkortning av sekunder eller bråkdelar av sekunder ignoreras.
6 Datumet sätts till det aktuella datumet, om inte källan är en strängtidsbokstav och destinationen är DBTYPE_DATE. I detta fall används 1899-12-30.
7 Om värdet flyter över är DBSTATUS_E_DATAOVERFLOW satt.
8 Tidsfält ignoreras.
9 Fält för bråkdelar av sekunder ignoreras.
10 Datumkomponenten ignoreras.
11 Tiden omvandlas till klientens tidszon. Om ett fel uppstår under denna omvandling sätts DBSTATUS_E_DATAOVERFLOW.
12 Strängen tolkas som en ISO-literal och konverteras till måltypen. Om detta misslyckas tolkas strängen som en OLE-datumbokstav (som också har tidskomponenter) och konverteras från ett OLE-datum (DBTYPE_DATE) till måltypen. Strängen måste följa syntaxen för literaler av måltypen som tillåts för att ISO-formatparsing ska lyckas. För att OLE-parsing ska lyckas måste strängen följa syntaxen som OLE känner igen. Om strängen inte kan tolkas är DBSTATUS_E_CANTCONVERTVALUE satt. Om några komponentvärden ligger utanför intervallet är DBSTATUS_E_DATAOVERFLOW satt.
13 Strängen tolkas som en ISO-literal och konverteras till måltypen. Om detta misslyckas tolkas strängen som en OLE-datumbokstav (som också har tidskomponenter) och konverteras från ett OLE-datum (DBTYPE_DATE) till måltypen. Strängen måste följa syntaxen för datetime-literaler, om inte destinationen är DBTYPE_DATE eller DBTYPE_DBTIMESTAMP. Om så är fallet tillåts antingen en datetime- eller tidsliteral för att ISO-formatparsing ska lyckas. För att OLE-parsing ska lyckas måste strängen följa syntaxen som OLE känner igen. Om strängen inte kan tolkas är DBSTATUS_E_CANTCONVERTVALUE satt. Om några komponentvärden ligger utanför intervallet är DBSTATUS_E_DATAOVERFLOW satt.

Se även

Bindningar och konverteringar (OLE DB)