Share via


sql_variant-Unterstützung für Datums- und Uhrzeittypen

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

In diesem Thema wird beschrieben, wie der datentyp sql_variant erweiterte Datums- und Uhrzeitfunktionen unterstützt.

Das Spaltenattribut SQL_CA_SS_VARIANT_TYPE wird zur Rückgabe des C-Typs einer Variant-Ergebnisspalte verwendet. SQL Server 2008 (10.0.x) führt ein zusätzliches Attribut ein, SQL_CA_SS_VARIANT_SQL_TYPE, das den SQL-Typ einer Variantenergebnisspalte im Implementierungszeilendeskriptor (IRD) festlegt. SQL_CA_SS_VARIANT_SQL_TYPE kann auch im IPD zur Angabe des SQL-Typs eines SQL_SS_TIME2- oder SQL_SS_TIMESTAMPOFFSET-Parameters verwendet werden, der vom C-Typ SQL_C_BINARY ist und an den Typ SQL_SS_VARIANT gebunden wurde.

Die neuen Typen SQL_SS_TIME2 und SQL_SS_TIMESTAMPOFFSET können durch SQLColAttribute festgelegt werden. SQL_CA_SS_VARIANT_SQL_TYPE können von SQLGetDescField zurückgegeben werden.

Für Ergebnisspalten konvertiert der Treiber Daten von Variant- zu Datum-/Uhrzeit-Typen. Weitere Informationen finden Sie unter Konvertierungen von SQL in C. Bei der Bindung an SQL_C_BINARY muss die Pufferlänge groß genug sein, um die Struktur zu empfangen, die dem SQL-Typ entspricht.

Für die Parameter SQL_SS_TIME2 und SQL_SS_TIMESTAMPOFFSET konvertiert der Treiber C-Werte in sql_variant Werte, wie in der folgenden Tabelle beschrieben. Wenn ein Parameter als SQL_C_BINARY gebunden ist und der Servertyp SQL_SS_VARIANT lautet, dann wird er als Binärwert behandelt, sofern die Anwendung SQL_CA_SS_VARIANT_SQL_TYPE nicht auf einen anderen SQL-Typ festgelegt hat. In diesem Fall hat QL_CA_SS_VARIANT_SQL_TYPE Vorrang; d. h. wenn SQL_CA_SS_VARIANT_SQL_TYPE festgelegt wurde, wird damit das Standardverhalten überschrieben, wonach der SQL-Varianttyp vom C-Typ abgeleitet wird.

C-Typ Servertyp Kommentare
SQL_C_CHAR varchar SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_WCHAR nvarcar SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_TINYINT SMALLINT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_STINYINT SMALLINT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_SHORT SMALLINT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_SSHORT SMALLINT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_USHORT INT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_LONG INT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_SLONG INT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_ULONG BIGINT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_SBIGINT BIGINT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_FLOAT real SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_DOUBLE float SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_BIT bit SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_UTINYINT TINYINT SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_BINARY varbinary SQL_CA_SS_VARIANT_SQL_TYPE wird nicht festgelegt.
SQL_C_BINARY time SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

Die Skalierung ist auf SQL_DESC_PRECISION (der DecimalDigits-Parameter von SQLBindParameter) festgelegt.
SQL_C_BINARY datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

Die Skalierung ist auf SQL_DESC_PRECISION (der DecimalDigits-Parameter von SQLBindParameter) festgelegt.
SQL_C_TYPE_DATE date SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_TYPE_TIME time(0) SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_TYPE_TIMESTAMP datetime2 Die Skalierung ist auf SQL_DESC_PRECISION (der DecimalDigits-Parameter von SQLBindParameter) festgelegt.
SQL_C_NUMERIC Decimal Die Genauigkeit ist auf SQL_DESC_PRECISION festgelegt (der ColumnSize-Parameter von SQLBindParameter).

Skalierung auf SQL_DESC_SCALE festgelegt (der DecimalDigits-Parameter von SQLBindParameter).
SQL_C_SS_TIME2 time SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.
SQL_C_SS_TIMESTAMPOFFSET datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE wird ignoriert.

Weitere Informationen

Verbesserungen bei Datum und Zeit (ODBC)