Comportamento dei tipi di data e ora migliorati con le versioni di SQL Server precedenti (ODBC)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

In questo argomento viene descritto il comportamento previsto quando un'applicazione client che utilizza caratteristiche avanzate di data e ora comunica con una versione di SQL Server precedente a SQL Server 2008 e quando un'applicazione client che utilizza Microsoft Data Access Components, Windows Data Access Components o una versione di SQL Server Native Client precedente a SQL Server 2008 invia comandi a un server che supporta le caratteristiche avanzate di data e ora.

Comportamento dei client legacy

Nelle applicazioni client compilate utilizzando una versione di SQL Server Native Client precedente a SQL Server 2008 i nuovi tipi di data/ora vengono visualizzati come colonne nvarchar. Il contenuto della colonna è la rappresentazione letterale, 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. Il nome del tipo di dati restituito, tuttavia, coinciderà con il nome effettivo del tipo di dati di SQL Server 2008.

I metadati dell'istruzione restituiti da SQLDescribeCol, SQLDescribeParam, SQGetDescField e SQLColAttribute restituiranno metadati coerenti con il tipo di livello inferiore sotto tutti gli aspetti, incluso il nome del tipo. Un esempio di questo tipo di livello inferiore è nvarchar.

Quando un'applicazione client di livello inferiore viene eseguita in un server (o versione successiva) in cui sono state apportate modifiche dello schema ai tipi di data/ora, il comportamento previsto è SQL Server 2008 il seguente:

Tipo di SQL Server 2005 SQL Server 2008Tipo di  (o versioni successive) Tipo del client ODBC Conversione risultati (da SQL a C) Conversione parametri (da C a SQL)
Datetime Data 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. Compatibile 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. Compatibile con SQL Server 2005 (9.x).
Time(7) SQL_C_TIME Non riesce: valore letterale di ora non valido. OK (1)
SQL_C_TYPE_TIMESTAMP Non riesce: valore letterale di 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 Data 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. Compatibile 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.

Compatibile con SQL Server 2005 (9.x).
datetime2(0) SQL_C_TYPE_TIMESTAMP OK OK

Descrizione dei simboli

Simbolo Significato
1 Un funzionamento corretto in SQL Server 2005 (9.x) corrisponde a un corretto funzionamento in una versione più recente di SQL Server.
2 Un'applicazione che funziona correttamente in SQL Server 2005 (9.x) potrebbe non essere eseguita correttamente in 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 di colonna Data time smalldatetime Datetime datetime2 datetimeoffset
DATA_TYPE SQL_WVARCHAR SQL_WVARCHAR SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_WVARCHAR SQL_WVARCHAR
TYPE_NAME Data 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 di colonna Data time smalldatetime Datetime datetime2 datetimeoffset
TYPE_NAME Data 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 Data 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

In caso di connessione a un'istanza del server di una versione precedente a SQL Server 2008, qualsiasi tentativo di utilizzo di nuovi tipi di server o codici di metadati e campi di descrizione associati provocherà la restituzione di SQL_ERROR. 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".

Vedere anche

Miglioramenti di data e ora (ODBC)