sql_variant による日付型と時刻型のサポート

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

このトピックでは、 sql_variant データ型が拡張日時機能をサポートする方法について説明します。

SQL_CA_SS_VARIANT_TYPE 列属性は、バリアント型結果列の C 型を返すために使用されます。 SQL Server 2008 (10.0.x) では、実装行記述子 (IRD) のバリアント結果列の SQL 型を設定する追加の属性 SQL_CA_SS_VARIANT_SQL_TYPE が導入されています。 SQL_CA_SS_VARIANT_SQL_TYPE は、実装パラメーター記述子 (IPD) 内で、SQL_SS_VARIANT 型で SQL_C_BINARY C 型がバインドされた SQL_SS_TIME2 パラメーターまたは SQL_SS_TIMESTAMPOFFSET パラメーターの SQL 型を指定するためにも使用できます。

新しい型SQL_SS_TIME2とSQL_SS_TIMESTAMPOFFSETは、SQLColAttribute によって設定できます。 SQL_CA_SS_VARIANT_SQL_TYPEは SQLGetDescField から返すことができます。

結果列については、ドライバーによってバリアント型から日付型または時刻型に変換されます。 詳細については、「 SQL から C への変換」を参照してください。SQL_C_BINARYにバインドする場合、バッファーの長さは、SQL 型に対応する構造体を受け取るのに十分な大きさにする必要があります。

SQL_SS_TIME2パラメーターとSQL_SS_TIMESTAMPOFFSET パラメーターの場合、ドライバーは、次の表に示すように、C 値を sql_variant 値に変換します。 パラメーターが SQL_C_BINARY としてバインドされ、かつ、サーバー型が SQL_SS_VARIANT である場合、アプリケーションで SQL_CA_SS_VARIANT_SQL_TYPE が別の SQL 型に設定されていない限り、バイナリ値として扱われます。 この場合は、SQL_CA_SS_VARIANT_SQL_TYPE が優先されます。つまり、SQL_CA_SS_VARIANT_SQL_TYPE が設定されている場合、C 型からバリアントの SQL 型を推定するという既定の動作がオーバーライドされます。

C 型 サーバーの種類 説明
SQL_C_CHAR varchar SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_WCHAR nvarcar SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_TINYINT smallint SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_STINYINT smallint SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_SHORT smallint SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_SSHORT smallint SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_USHORT INT SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_LONG INT SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_SLONG INT SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_ULONG bigint SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_SBIGINT bigint SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_FLOAT real SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_DOUBLE float SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_BIT bit SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_UTINYINT tinyint SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_BINARY varbinary SQL_CA_SS_VARIANT_SQL_TYPE は設定されません。
SQL_C_BINARY time SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIME2

Scale は SQL_DESC_PRECISION に設定されます (SQLBindParameterDecimalDigits パラメーター)。
SQL_C_BINARY datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

Scale は SQL_DESC_PRECISION に設定されます (SQLBindParameterDecimalDigits パラメーター)。
SQL_C_TYPE_DATE date SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_TYPE_TIME time(0) SQL_CA_SS_VARIANT_SQL_TYPEは無視されます。
SQL_C_TYPE_TIMESTAMP datetime2 Scale は SQL_DESC_PRECISION に設定されます (SQLBindParameterDecimalDigits パラメーター)。
SQL_C_NUMERIC decimal 有効桁数は SQL_DESC_PRECISION に設定されます (SQLBindParameterColumnSize パラメーター)。

スケール を SQL_DESC_SCALE に設定します (SQLBindParameter の DecimalDigits パラメーター)。
SQL_C_SS_TIME2 time SQL_CA_SS_VARIANT_SQL_TYPE は無視されます。
SQL_C_SS_TIMESTAMPOFFSET datetimeoffset SQL_CA_SS_VARIANT_SQL_TYPE は無視されます。

参照

日付と時刻の強化機能 (ODBC)