sql_variant による日付型と時刻型のサポート
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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_TIME2または型SQL_SS_VARIANTでバインドされた SQL_C_BINARY C 型を持つ 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 型 | サーバーの種類 | Comments |
---|---|---|
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 (SQLBindParameter の DecimalDigits パラメーター) に設定されます。 |
SQL_C_BINARY | datetimeoffset | SQL_CA_SS_VARIANT_SQL_TYPE = SQL_SS_TIMESTAMPOFFSET scale は SQL_DESC_PRECISION (SQLBindParameter の DecimalDigits パラメーター) に設定されます。 |
SQL_C_TYPE_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 (SQLBindParameter の DecimalDigits パラメーター) に設定されます。 |
SQL_C_NUMERIC | 小数 | 有効桁数は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 は無視されます。 |