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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für