Conversioni di SQL Server Native Client eseguite dal server al client
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
In questo argomento vengono descritte le conversioni di data/ora eseguite tra SQL Server 2008 (10.0.x) (o versione successiva) e un'applicazione client scritta con SQL Server Native Client OLE DB.
Conversioni
Nella tabella seguente vengono descritte le conversioni tra il tipo restituito al client e il tipo presente nell'associazione. Per i parametri di output, se è stato chiamato ICommandWithParameters::SetParameterInfo e il tipo specificato in pwszDataSourceType non corrisponde al tipo di dati effettivo del server, il server esegue una conversione implicita e il tipo restituito al client corrisponderà a quello specificato tramite ICommandWithParameters::SetParameterInfo. Ciò può causare risultati di conversione imprevisti quando le regole di conversione del server sono diverse da quelle descritte in questo argomento. Quando ad esempio è necessario specificare una data predefinita, SQL Server utilizza 1900-1-1 anziché 1899-12-30.
To -> Da |
DATE | DBDATE | DBTIME | DBTIME2 | DBTIMESTAMP | DBTIMESTAMPOFFSET | FILETIME | BYTES | VARIANT | SSVARIANT | BSTR | STR | WSTR |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Data | 1,7 | OK | - | - | 1 | 1,3 | 1,7 | - | OK (VT_BSTR) | OK | Ok | 4 | 4 |
Time | 5,6,7 | - | 9 | OK | 6 | 3,6 | 5,6 | - | OK (VT_BSTR) | OK | Ok | 4 | 4 |
Smalldatetime | 7 | 8 | 9,10 | 10 | OK | 3 | 7 | - | 7 (VT_DATE) | OK | Ok | 4 | 4 |
Datetime | 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 | - | OK (VT_BSTR) | OK | Ok | 4 | 4 |
Datetimeoffset | 5,7,11 | 8,11 | 9,10,11 | 10,11 | 7,11 | OK | 5,7,11 | - | OK (VT_BSTR) | OK | Ok | 4 | 4 |
Char, Varchar, Nchar, Nvarchar |
7, 13 | 12 | 12,9 | 12 | 12 | 12 | 7,13 | N/D | N/D | N/D | N/D | N/D | N/D |
Sql_variant (datetime) |
7 | 8 | 9,10 | 10 | OK | 3 | 7 | - | 7(VT_DATE) | OK | Ok | 4 | 4 |
Sql_variant (smalldatetime) |
7 | 8 | 9,10 | 10 | OK | 3 | 7 | - | 7(VT_DATE) | OK | Ok | 4 | 4 |
Sql_variant (date) |
1,7 | Ok | 2 | 2 | 1 | 1,3 | 1,7 | - | OK(VT_BSTR) | OK | Ok | 4 | 4 |
Sql_variant (time) |
5,6,7 | 2 | 6 | OK | 6 | 3,6 | 5,6 | - | OK(VT_BSTR) | OK | Ok | 4 | 4 |
Sql_variant (datetime2) |
5,7 | 8 | 9,10 | 10 | OK | 3 | 5,7 | - | OK(VT_BSTR) | OK | Ok | 4 | 4 |
Sql_variant (datetimeoffset) |
5,7,11 | 8,11 | 9,10,11 | 10,11 | 7,11 | OK | 5,7,11 | - | OK(VT_BSTR) | OK | Ok | 4 | 4 |
Descrizione dei simboli
Simbolo | significato |
---|---|
OK | Nessuna conversione necessaria. |
- | Non viene supportata alcuna conversione. Se l'associazione viene convalidata quando viene chiamato IAccessor::CreateAccessor, viene restituito DBBINDSTATUS_UPSUPPORTEDCONVERSION in rgStatus. Quando la convalida della funzione di accesso viene rinviata, viene impostato DBSTATUS_E_BADACCESSOR. |
1 | I campi relativi all'ora vengono impostati su zero. |
2 | Viene impostato DBSTATUS_E_CANTCONVERTVALUE. |
3 | Il fuso orario viene impostato su zero. |
4 | Se le dimensioni del buffer client non sono sufficienti, viene impostato DBSTATUS_S_TRUNCATED. Quando il tipo di server include secondi frazionari, il numero di cifre nella stringa del risultato corrisponde esattamente alla scala del tipo di server. |
5 | Il troncamento dei secondi o dei secondi frazionari viene ignorato. |
6 | La data viene impostata sul valore corrente, a meno che l'origine non sia una stringa con valore letterale ora e la destinazione non sia DBTYPE_DATE. In questo caso viene utilizzato il valore 1899-12-30. |
7 | Se il valore comporta un overflow, viene impostato DBSTATUS_E_DATAOVERFLOW. |
8 | I campi relativi all'ora vengono ignorati. |
9 | I campi relativi ai secondi frazionari vengono ignorati. |
10 | Il componente relativo alla data viene ignorato. |
11 | Viene effettuata la conversione dell'ora nel fuso orario del client. Se si verifica un errore durante questa conversione, viene impostato DBSTATUS_E_DATAOVERFLOW. |
12 | La stringa viene analizzata come valore letterale ISO e convertita nel tipo di destinazione. Se l'operazione non riesce, la stringa viene analizzata come valore letterale data OLE (che presenta anche componenti di ora) e convertita da data OLE (DBTYPE_DATE) nel tipo di destinazione. La stringa deve essere conforme alla sintassi per i valori letterali del tipo di destinazione consentiti per la riuscita dell'analisi del formato ISO. Perché l'analisi OLE riesca, è necessario che la stringa sia conforme alla sintassi riconosciuta da OLE. Se non è possibile analizzare la stringa, viene impostato DBSTATUS_E_CANTCONVERTVALUE. Se sono presenti valori di componente esterni all'intervallo, viene impostato DBSTATUS_E_DATAOVERFLOW. |
13 | La stringa viene analizzata come valore letterale ISO e convertita nel tipo di destinazione. Se l'operazione non riesce, la stringa viene analizzata come valore letterale data OLE (che presenta anche componenti di ora) e convertita da data OLE (DBTYPE_DATE) nel tipo di destinazione. La stringa deve essere conforme alla sintassi per i valori letterali di data e ora, a meno che la destinazione non sia DBTYPE_DATE o DBTYPE_DBTIMESTAMP. In questo caso, per la riuscita dell'analisi del formato ISO è consentito un valore letterale data e ora oppure ora. Perché l'analisi OLE riesca, è necessario che la stringa sia conforme alla sintassi riconosciuta da OLE. Se non è possibile analizzare la stringa, viene impostato DBSTATUS_E_CANTCONVERTVALUE. Se sono presenti valori di componente esterni all'intervallo, viene impostato DBSTATUS_E_DATAOVERFLOW. |