Condividi tramite


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

In questo argomento viene descritto il comportamento previsto quando un'applicazione client che utilizza funzionalità 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 funzionalità 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 delle colonne è costituito da rappresentazioni letterali, come descritto nella sezione "Formati di dati: stringhe e valori letterali" di Supporto dei tipi di dati per i miglioramenti relativi alla data/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 di istruzione restituiti da SQLDescribeCol, SQLDescribeParam, SQGetDescField e SQLColAttribute restituiranno metadati completamente consistenti con il tipo legacy, incluso il nome del tipo. Un esempio di un tipo legacy del genere è nvarchar.

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

Tipo di SQL Server 2005

Tipo di SQL Server 2008

Tipo di 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. Compatibile con SQL Server 2005.

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.

time(7)

SQL_C_TIME

Esito negativo: valore letterale di ora non valido.

OK (1)

SQL_C_TYPE_TIMESTAMP

Esito negativo: 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

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. Compatibile con SQL Server 2005.

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.

datetime2(0)

SQL_C_TYPE_TIMESTAMP

OK

OK

Descrizione dei simboli

Simbolo

Significato

1

Un funzionamento corretto in SQL Server 2005 corrisponde a un corretto funzionamento anche in SQL Server 2008.

2

Un'applicazione che funziona correttamente in SQL Server 2005 potrebbe non essere eseguita correttamente in SQL Server 2008.

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

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 di 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

SEARCHABLE

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

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".