Partager via


Comportement des types de date/d'heure améliorés avec les versions SQL Server antérieures (ODBC)

Cette rubrique décrit le comportement attendu lorsqu'une application cliente qui utilise les fonctionnalités améliorées de date et d'heure communique avec une version de SQL Server antérieure à SQL Server 2008, et lorsqu'une application cliente qui utilise Microsoft Data Access Components, Windows Data Access Components ou une version de SQL Server Native Client antérieure à SQL Server 2008 envoie des commandes à un serveur qui prend en charge les fonctionnalités améliorées de date et d'heure.

Comportement de client de bas niveau

Les applications clientes compilées à l'aide d'une version de SQL Server Native Client antérieure à SQL Server 2008 voient les nouveaux types de date et d'heure sous la forme de colonnes nvarchar. Le contenu des colonnes correspond aux représentations littérales, telles que décrites dans la section « Formats de données : chaînes et littéraux » de Prise en charge du type de données pour les améliorations Date/Heure (ODBC). La taille de colonne correspond à la longueur littérale maximale pour la précision en fractions de seconde spécifiée pour la colonne.

Les API du catalogue retournent des métadonnées conformes au code du type de données de bas niveau retourné au client (nvarchar, par exemple) et à la représentation de bas niveau associée (le format littéral approprié, par exemple). Toutefois, le nom du type de données retourné est le nom de type SQL Server 2008 réel.

Les métadonnées d'instruction retournées par SQLDescribeCol, SQLDescribeParam, SQGetDescField et SQLColAttribute retourneront les métadonnées cohérentes avec le type de bas niveau à tous les égards, y compris le nom de type. Un exemple d'un tel type de bas niveau est nvarchar.

Lorsqu'une application cliente de bas niveau s'exécute sur un serveur SQL Server 2008 (ou version ultérieure) sur lequel des modifications de schéma ont été apportées aux types de date et d'heure, le comportement attendu est le suivant :

Type SQL Server 2005

Type SQL Server 2008 (ou version ultérieure)

Type de client ODBC

Conversion des résultats (de SQL vers C)

Conversion des paramètres (de C vers SQL)

Datetime

Date

SQL_C_TYPE_DATE

OK

OK (1)

SQL_C_TYPE_TIMESTAMP

Champs d'heure définis à zéro.

OK (2)

Échoue si le champ d'heure n'est pas nul. Fonctionne avec SQL Server 2005.

Time(0)

SQL_C_TYPE_TIME

OK

OK (1)

SQL_C_TYPE_TIMESTAMP

Champs de date définis à la date actuelle.

OK (2)

La date est ignorée. Échoue si les fractions de seconde ne sont pas nulles. Fonctionne avec SQL Server 2005.

Time(7)

SQL_C_TIME

Échec : littéral d'heure non valide.

OK (1)

SQL_C_TYPE_TIMESTAMP

Échec : littéral d'heure non valide.

OK (1)

Datetime2(3)

SQL_C_TYPE_TIMESTAMP

OK

OK (1)

Datetime2(7)

SQL_C_TYPE_TIMESTAMP

OK

La valeur sera arrondie à 1/300e de seconde par la conversion cliente.

Smalldatetime

Date

SQL_C_TYPE_DATE

OK

OK

SQL_C_TYPE_TIMESTAMP

Champs d'heure définis à zéro.

OK (2)

Échoue si le champ d'heure n'est pas nul. Fonctionne avec SQL Server 2005.

Time(0)

SQL_C_TYPE_TIME

OK

OK

SQL_C_TYPE_TIMESTAMP

Champs de date définis à la date actuelle.

OK (2)

La date est ignorée. Échoue si les fractions de seconde ne sont pas nulles.

Fonctionne avec SQL Server 2005.

Datetime2(0)

SQL_C_TYPE_TIMESTAMP

OK

OK

Liste des symboles

Symbole

Signification

1

Si cela a fonctionné avec SQL Server 2005 cela doit continuer à fonctionner avec une version plus récente de SQL Server.

2

Une application qui fonctionnait avec SQL Server 2005 pourrait échouer avec une version plus récente de SQL Server.

Notez que seules les modifications de schéma courantes ont été considérées. Les modifications courantes sont les suivantes :

  • Utilisation d'un nouveau type alors qu'en toute logique une application requiert uniquement une valeur de date ou d'heure. Toutefois, l'application a été forcée d'utiliser des données datetime ou smalldatetime en raison du manque de types de date et d'heure distincts.

  • Utilisation d'un nouveau type pour gagner en précision sur les fractions de seconde.

  • Passage à datetime2, car il représente le type de données de date et d'heure préféré.

Métadonnées de colonne retournées par SQLColumns, SQLProcedureColumns et SQLSpecialColumns

Les valeurs de colonnes suivantes sont retournées pour les types date/heure :

Type de colonne

date

heure

smalldatetime

datetime

datetime2

datetimeoffset

DATA_TYPE

SQL_WVARCHAR

SQL_WVARCHAR

SQL_TYPE_TIMESTAMP

SQL_TYPE_TIMESTAMP

SQL_WVARCHAR

SQL_WVARCHAR

TYPE_NAME

date

heure

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 ne retourne pas SQL_DATA_TYPE, SQL_DATETIME_SUB, CHAR_OCTET_LENGTH ni SS_DATA_TYPE.

Métadonnées de type de données retournées par SQLGetTypeInfo

Les valeurs de colonnes suivantes sont retournées pour les types date/heure :

Type de colonne

date

heure

smalldatetime

datetime

datetime2

datetimeoffset

TYPE_NAME

date

heure

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

Comportement de serveur de bas niveau

En cas de connexion à une instance de serveur d'une version antérieure à SQL Server 2008, toute tentative d'utiliser les nouveaux types de serveur ou les codes de métadonnées et les champs de descripteur associés provoquera le renvoi d'une erreur SQL_ERROR. Un enregistrement de diagnostic sera généré avec SQLSTATE HY004 et le message « Type de données SQL non valide pour la version du serveur lors de la connexion », ou avec 07006 et « Violation de l'attribut de type de données restreint ».