Freigeben über


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

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Analytics Platform System (PDW)

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

Downlevelclient-Verhalten

Clientanwendungen, die mit einer Version von SQL Server Native Client vor SQL Server 2008 (10.0.x) kompiliert wurden, sehen die neuen Datums-/Uhrzeittypen als nvarchar-Spalten an. Die Spalteninhalte sind die Literaldarstellungen, wie im Abschnitt "Datenformate: Zeichenfolgen und Literale" der Datentypunterstützung für ODBC-Datums- und Uhrzeitverbesserungen 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 (10.0.x)-Typname.

Von SQLDescribeCol, SQLDescribeParam, SQGetDescField und SQLColAttribute zurückgegebene Metadaten werden Metadaten zurückgegeben, die mit dem Abwärtstyp in allen Hinsicht konsistent sind, einschließlich des Typnamens. Ein Beispiel für einen solchen Abwärtstyp ist nvarchar.

Wenn eine Clientanwendung auf unterer Ebene mit einem SQL Server 2008 (10.0.x) (oder höher) ausgeführt wird, auf dem Schemaänderungen an Datums-/Uhrzeittypen vorgenommen wurden, lautet das erwartete Verhalten wie folgt:

SQL Server 2005-Typ SQL Server 2008 (10.0.x) (oder höher) Typ ODBC-Clienttyp Ergebniskonvertierung (SQL zu C) Parameterkonvertierung (C zu SQL)
Datetime Datum 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. Funktioniert mit SQL Server 2005 (9.x).
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 sind. Funktioniert mit SQL Server 2005 (9.x).
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 Datum 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. Funktioniert mit SQL Server 2005 (9.x).
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.

Funktioniert mit SQL Server 2005 (9.x).
Datetime2(0) SQL_C_TYPE_TIMESTAMP OK OK

Aufschlüsselung der Symbole

Symbol Bedeutung
1 Wenn sie mit SQL Server 2005 (9.x) gearbeitet hat, sollte sie weiterhin mit einer neueren Version von SQL Server arbeiten.
2 Eine Anwendung, die mit SQL Server 2005 (9.x) gearbeitet 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 date/time-Typen 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 date/time-Typen 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 eine Verbindung mit einer Serverinstanz einer früheren Version hergestellt wird, die SQL Server 2008 (10.0.x) verwendet wird, führt jeder Versuch, die neuen Servertypen oder zugeordneten Metadatencodes und Deskriptorfelder zu verwenden, SQL_ERROR zurückgegeben werden. 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.

Weitere Informationen

Verbesserungen bei Datum und Zeit (ODBC)