次の方法で共有


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

このトピックでは、日付と時刻に関する sql_variant データ型の機能強化について説明します。

SQL_CA_SS_VARIANT_TYPE 列属性は、バリアント型結果列の C 型を返すために使用されます。 SQL Server 2008 では、SQL_CA_SS_VARIANT_SQL_TYPE 属性が追加されています。この属性は、実装行記述子 (IRD) 内のバリアント型結果列の SQL 型を設定します。 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

小数点以下の桁数は SQL_DESC_PRECISION (SQLBindParameter の DecimalDigits パラメーター) に設定されます。

SQL_C_BINARY

datetimeoffset

SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET

小数点以下の桁数は SQL_DESC_PRECISION (SQLBindParameter の DecimalDigits パラメーター) に設定されます。

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

小数点以下の桁数は SQL_DESC_PRECISION (SQLBindParameter の DecimalDigits パラメーター) に設定されます。

SQL_C_NUMERIC

decimal

有効桁数は SQL_DESC_PRECISION (SQLBindParameter の ColumnSize パラメーター) に設定されます。

小数点以下の桁数は 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)