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 に設定されます (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 | 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 | 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 は無視されます。 |
参照
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示