Comportamento dei tipi di data e ora migliorati con le versioni di SQL Server precedenti (ODBC)
Si applica a:SQL ServerDatabase SQL diAzure Istanzagestita di SQL di Azure Azure Synapse Analytics PlatformSystem (PDW)
Questo argomento descrive il comportamento previsto quando un'applicazione client che usa funzionalità avanzate di data e ora comunica con una versione di SQL Server precedente a SQL Server 2008 (10.0.x) e quando un'applicazione client che usa componenti di Microsoft Data Access, Componenti di Accesso ai dati di Windows o una versione di SQL Server Native Client precedente a SQL Server 2008 (10.0.x) invia comandi a un server che supporta funzionalità avanzate di data e ora.
Comportamento dei client legacy
Le applicazioni client compilate usando una versione di SQL Server Native Client precedente a SQL Server 2008 (10.0.x) vedono i nuovi tipi di data/ora come colonne nvarchar. Il contenuto della colonna è rappresentato dalle rappresentazioni letterali, come descritto nella sezione "Formati di dati: Stringhe e valori letterali" di Supporto dei tipi di dati per i miglioramenti di data e ora ODBC. Le dimensioni di colonna corrispondono alla lunghezza massima in valori letterali per la precisione frazionaria dei secondi specificata per la colonna.
Le API di catalogo restituiranno metadati consistenti con il codice del tipo di dati legacy restituito al client, ad esempio nvarchar, e la rappresentazione legacy associata, ad esempio il formato letterale appropriato. Tuttavia, il nome del tipo di dati restituito sarà il nome del tipo reale di SQL Server 2008 (10.0.x).
I metadati delle istruzioni restituiti da SQLDescribeCol, SQLDescribeParam, SQGetDescField e SQLColAttribute restituiranno metadati coerenti con il tipo di livello inferiore in tutti i aspetti, incluso il nome del tipo. Un esempio di tale tipo di livello inferiore è nvarchar.
Quando un'applicazione client di livello inferiore viene eseguita su un server SQL Server 2008 (10.0.x) (o versione successiva) in cui sono state apportate modifiche dello schema ai tipi di data/ora, il comportamento previsto è il seguente:
Tipo di SQL Server 2005 | Tipo SQL Server 2008 (10.0.x) (o versione successiva) | Tipo del client ODBC | Conversione risultati (da SQL a C) | Conversione parametri (da C a SQL) |
---|---|---|---|---|
Datetime | Date | SQL_C_TYPE_DATE | Ok | OK (1) |
SQL_C_TYPE_TIMESTAMP | Campi dell'ora impostati su zero. | OK (2) Esito negativo se il campo dell'ora è diverso da zero. Funziona con SQL Server 2005 (9.x). |
||
Time(0) | SQL_C_TYPE_TIME | Ok | OK (1) | |
SQL_C_TYPE_TIMESTAMP | Campi della data impostati sulla data corrente. | OK (2) La data viene ignorata. Esito negativo se i secondi frazionari sono diversi da zero. Funziona con SQL Server 2005 (9.x). |
||
Time(7) | SQL_C_TIME | Errore: valore letterale ora non valido. | OK (1) | |
SQL_C_TYPE_TIMESTAMP | Errore: valore letterale ora non valido. | OK (1) | ||
Datetime2(3) | SQL_C_TYPE_TIMESTAMP | Ok | OK (1) | |
Datetime2(7) | SQL_C_TYPE_TIMESTAMP | Ok | Il valore viene arrotondato a 1/300 di secondo dalla conversione client. | |
Smalldatetime | Date | SQL_C_TYPE_DATE | Ok | Ok |
SQL_C_TYPE_TIMESTAMP | Campi dell'ora impostati su zero. | OK (2) Esito negativo se il campo dell'ora è diverso da zero. Funziona con SQL Server 2005 (9.x). |
||
Time(0) | SQL_C_TYPE_TIME | Ok | Ok | |
SQL_C_TYPE_TIMESTAMP | Campi della data impostati sulla data corrente. | OK (2) La data viene ignorata. Esito negativo se i secondi frazionari sono diversi da zero. Funziona con SQL Server 2005 (9.x). |
||
datetime2(0) | SQL_C_TYPE_TIMESTAMP | Ok | Ok |
Descrizione dei simboli
Simbolo | Significato |
---|---|
1 | Se ha funzionato con SQL Server 2005 (9.x), deve continuare a funzionare con una versione più recente di SQL Server. |
2 | Un'applicazione che ha funzionato con SQL Server 2005 (9.x) potrebbe non riuscire con una versione più recente di SQL Server. |
Si noti che sono state prese in considerazione solo le modifiche dello schema comuni, elencate di seguito:
Utilizzo di un nuovo tipo nei casi in cui logicamente un'applicazione richiede solo un valore di data o di ora. Nelle versioni precedenti viene imposto l'utilizzo di datetime o smalldatetime all'applicazione in quanto non sono disponibili tipi di data e ora distinti.
Utilizzo di un nuovo tipo per ottenere precisione o accuratezza maggiore nei secondi frazionari.
Passaggio a datetime2 in quanto tipo di dati preferito per la data e l'ora.
Metadati di colonna restituiti da SQLColumns, SQLProcedureColumns e SQLSpecialColumns
Per i tipi di data/ora vengono restituiti i valori di colonna seguenti:
Tipo colonna | date | time | smalldatetime | datetime | datetime2 | datetimeoffset |
---|---|---|---|---|---|---|
DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_WVARCHAR | SQL_WVARCHAR |
TYPE_NAME | date | time | smalldatetime | datetime | datetime2 | datetimeoffset |
COLUMN_SIZE | 10 | 8,10..16 | 16 | 23 | 19, 21..27 | 26, 28..34 |
BUFFER_LENGTH | 20 | 16, 20..32 | 16 | 16 | 38, 42..54 | 52, 56..68 |
DECIMAL_DIGITS | NULL | NULL | 0 | 3 | NULL | NULL |
SQL_DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_DATETIME | SQL_DATETIME | SQL_WVARCHAR | SQL_WVARCHAR |
SQL_DATETIME_SUB | NULL | NULL | SQL_CODE_TIMESTAMP | SQL_CODE_TIMESTAMP | NULL | NULL |
CHAR_OCTET_LENGTH | NULL | NULL | NULL | NULL | NULL | NULL |
SS_DATA_TYPE | 0 | 0 | 111 | 111 | 0 | 0 |
SQLSpecialColumns non restituisce SQL_DATA_TYPE, SQL_DATETIME_SUB, CHAR_OCTET_LENGTH o SS_DATA_TYPE.
Metadati del tipo di dati restituiti da SQLGetTypeInfo
Per i tipi di data/ora vengono restituiti i valori di colonna seguenti:
Tipo colonna | date | time | smalldatetime | datetime | datetime2 | datetimeoffset |
---|---|---|---|---|---|---|
TYPE_NAME | date | time | smalldatetime | datetime | datetime2 | datetimeoffset |
DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_WVARCHAR | SQL_WVARCHAR |
COLUMN_SIZE | 10 | 16 | 16 | 23 | 27 | 34 |
LITERAL_PREFIX | ' | ' | ' | ' | ' | ' |
LITERAL_SUFFIX | ' | ' | ' | ' | ' | ' |
CREATE_PARAMS | NULL | NULL | NULL | NULL | NULL | NULL |
NULLABLE | SQL_NULLABLE | SQL_NULLABLE | SQL_NULLABLE | SQL_NULLABLE | SQL_NULLABLE | SQL_NULLABLE |
CASE_SENSITIVE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
RICERCABILE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE |
UNSIGNED_ATTRIBUTE | NULL | NULL | NULL | NULL | NULL | NULL |
FXED_PREC_SCALE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
AUTO_UNIQUE_VALUE | NULL | NULL | NULL | NULL | NULL | NULL |
LOCAL_TYPE_NAME | date | time | smalldatetime | datetime | datetime2 | datetimeoffset |
MINIMUM_SCALE | NULL | NULL | 0 | 3 | NULL | NULL |
MAXIMUM_SCALE | NULL | NULL | 0 | 3 | NULL | NULL |
SQL_DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_DATETIME | SQL_DATETIME | SQL_WVARCHAR | SQL_WVARCHAR |
SQL_DATETIME_SUB | NULL | NULL | SQL_CODE_TIMESTAMP | SQL_CODE_TIMESTAMP | NULL | NULL |
NUM_PREC_RADIX | NULL | NULL | NULL | NULL | NULL | NULL |
INTERVAL_PRECISION | NULL | NULL | NULL | NULL | NULL | NULL |
USERTYPE | 0 | 0 | 12 | 22 | 0 | 0 |
Comportamento dei server legacy
Quando si è connessi a un'istanza del server di una versione precedente che SQL Server 2008 (10.0.x), qualsiasi tentativo di usare i nuovi tipi di server o i codici di descrizione associati e i campi del descrittore genererà SQL_ERROR restituito. Verrà generato un record di diagnostica con SQLSTATE HY004 e il messaggio "Tipo di dati non valido per la versione del server in connessione" o con 07006 e il messaggio "Violazione dell'attributo del tipo di dati".
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per