Share via


Verbessertes Verhalten des Datums- und Uhrzeittyps bei früheren Versionen von SQL Server (ODBC)

In diesem Thema wird das erwartete Verhalten beschrieben, wenn eine Clientanwendung, die verbesserte Datums- und Uhrzeitfunktionen verwendet, mit einer Version von SQL Server vor SQL Server 2008 kommuniziert und wenn eine Clientanwendung, die Microsoft Data Access Components, Windows Data Access Components oder eine Version von SQL Server Native Client vor SQL Server 2008 verwendet, Befehle an einen Server sendet, der verbesserte Datums- und Uhrzeitfunktionen unterstützt.

Downlevelclient-Verhalten

Clientanwendungen, die mit einer SQL Server Native Client-Version vor SQL Server 2008 kompiliert wurden, erkennen die neuen Datums-/Uhrzeittypen als nvarchar-Spalten. Der Spalteninhalt entspricht der literalen Darstellung wie im Abschnitt "Datenformate: Zeichenfolgen und Literale" unter Datentypunterstützung für ODBC-Verbesserungen bei Datum/Uhrzeit beschrieben. Die Spaltengröße ist die maximale literale Länge mit der für die Spalte angegebenen Genauigkeit in Bruchteilen von Sekunden.

Katalog-APIs geben Metadaten zurück, die mit dem an den Client zurückgegebenen Datentypcode früherer Versionen (z. B. nvarchar) und der zugeordneten Darstellung früherer Versionen (z. B. das entsprechende literale Format) übereinstimmt. Der zurückgegebene Datentypname ist jedoch der echte SQL Server 2008-Typname.

Von SQLDescribeCol, SQLDescribeParam, SQGetDescField und SQLColAttribute zurückgegebene Anweisungsmetadaten geben Metadaten zurück, die mit dem Downleveltyp in jeder Hinsicht, so auch mit dem Typnamen, übereinstimmen. nvarchar ist ein Beispiel für einen Downleveltyp dieser Art.

Wenn eine Downlevelclientanwendung auf einem SQL Server 2008-Server (oder höher) ausgeführt wird, an dem Schemaänderungen an Datums-/Uhrzeittypen vorgenommen wurden, sieht das zu erwartende Verhalten wie folgt aus:

SQL Server 2005-Typ

SQL Server 2008 (oder höher) - Typ

ODBC-Clienttyp

Ergebniskonvertierung (SQL zu C)

Parameterkonvertierung (C zu SQL)

Datetime

Date

SQL_C_TYPE_DATE

OK

OK (1)

SQL_C_TYPE_TIMESTAMP

Zeitfelder werden auf 0 (Null) festgelegt.

OK (2)

Fehler, wenn das Zeitfeld ungleich 0 (null) ist. Verwendet SQL Server 2005.

Time(0)

SQL_C_TYPE_TIME

OK

OK (1)

SQL_C_TYPE_TIMESTAMP

Datumsfelder werden auf das aktuelle Datum festgelegt.

OK (2)

Datum wird ignoriert. Fehler, wenn Sekundenbruchteile ungleich 0 (null) sind. Verwendet SQL Server 2005.

Time(7)

SQL_C_TIME

Fehler. Ungültiges Zeitliteral.

OK (1)

SQL_C_TYPE_TIMESTAMP

Fehler. Ungültiges Zeitliteral.

OK (1)

Datetime2(3)

SQL_C_TYPE_TIMESTAMP

OK

OK (1)

Datetime2(7)

SQL_C_TYPE_TIMESTAMP

OK

Wert wird von Clientkonvertierung auf 1/300stel Sekunde gerundet.

Smalldatetime

Date

SQL_C_TYPE_DATE

OK

OK

SQL_C_TYPE_TIMESTAMP

Zeitfelder werden auf 0 (Null) festgelegt.

OK (2)

Fehler, wenn das Zeitfeld ungleich 0 (null) ist. Verwendet SQL Server 2005.

Time(0)

SQL_C_TYPE_TIME

OK

OK

SQL_C_TYPE_TIMESTAMP

Datumsfelder werden auf das aktuelle Datum festgelegt.

OK (2)

Datum wird ignoriert. Fehler, wenn Sekundenbruchteile ungleich 0 (null) sind.

Verwendet SQL Server 2005.

Datetime2(0)

SQL_C_TYPE_TIMESTAMP

OK

OK

Aufschlüsselung der Symbole

Symbol

Bedeutung

1

Wenn es mit SQL Server 2005 funktioniert hat, sollte es auch mit einer neueren Version von SQL Server funktionieren.

2

Eine Anwendung, die mit SQL Server 2005 funktiniert hat, kann mit einer neueren Version von SQL Server fehlschlagen.

Nur allgemeine Schemaänderungen wurden berücksichtigt. Dabei handelt es sich um die folgenden allgemeinen Änderungen:

  • Verwenden eines neuen Typs, wenn eine Anwendung logisch nur einen Datums- oder Zeitwert erfordert. Die Anwendung musste jedoch datetime oder smalldatetime verwenden, da keine separaten Datums- und Zeittypen verfügbar waren.

  • Verwenden eines neuen Typs, um zusätzliche Genauigkeit in Sekundenbruchteilen zu erzielen.

  • Wechseln zu datetime2, da dies der bevorzugte Datentyp für Datum und Uhrzeit ist.

Von 'SQLColumns', 'SQLProcedureColumns' und 'SWLSpecialColumns' zurückgegebene Spaltenmetadaten

Die folgenden Spaltenwerte werden für Datums-/Uhrzeittypen zurückgegeben:

Spaltentyp

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 gibt weder SQL_DATA_TYPE noch SQL_DATETIME_SUB, CHAR_OCTET_LENGTH oder SS_DATA_TYPE zurück.

Von 'SQLGetTypeInfo' zurückgegebene Datentypmetadaten

Die folgenden Spaltenwerte werden für Datums-/Uhrzeittypen zurückgegeben:

Spaltentyp

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

Downlevelserver-Verhalten

Wenn bei der Verbindung mit einer Serverinstanz einer früheren Version von SQL Server 2008 die neuen Servertypen oder zugehörige Metadatencodes und Deskriptorfelder verwendet werden, wird ein SQL_ERROR zurückgegeben. Es wird ein Diagnosedatensatz mit SQLSTATE HY004 und der Meldung "Ungültiger SQL-Datentyp für Serverversion in Verbindung" oder mit 07006 und der Meldung "Attributverletzung beschränkter Datentypen" zurückgegeben.