次の方法で共有


パラメーターと結果のメタデータ

このトピックでは、日付と時刻のデータ型の実装パラメーター記述子 (IPD) フィールドと実装行記述子 (IRD) フィールドで返される内容について説明します。

IPD フィールドで返される情報

IPD フィールドには、次の情報が返されます。

パラメーターのタイプ 日付 時間 smalldatetime(スモールデイトタイム) datetime datetime2 datetimeoffset (デイトタイムオフセット)
SQL_DESC_CASE_SENSITIVE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CONCISE_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_SS_TIMESTAMPOFFSET (タイムスタンプオフセット)
SQL_DESC_DATETIME_INTERVAL_CODE SQL_CODE_DATE 0 SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP 0
SQL_DESC_DATETIME_INTERVAL_PRECISION 10 8,10..16 16 23 19、21..27 26、28..34
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_LENGTH 10 8,10..16 16 23 19、21..27 26、28..34
SQL_DESC_OCTET_LENGTH 6 12 4 8 16 20
SQL_DESC_PRECISION 0 0..7 0 3 0..7 0..7
SQL_DESC_SCALE 0 0..7 0 3 0..7 0..7
SQL_DESC_TYPE SQL_TYPE_DATE SQL_SS_TYPE_TIME2 SQL_DATETIME SQL_DATETIME SQL_DATETIME SQL_SS_TIMESTAMPOFFSET (タイムスタンプオフセット)
SQL_DESC_TYPE_NAME date time smalldatetimeIRD では、IPD でdatetime2 datetimeIRD では、IPD でdatetime2 datetime2 datetimeoffset (デイトタイムオフセット)
SQL_CA_SS_VARIANT_TYPE SQL_C_TYPE_DATE SQL_C_TYPE_BINARY SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_BINARY
SQL_CA_SS_VARIANT_SQL_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_SS_TIMESTAMPOFFSET (タイムスタンプオフセット)
SQL_CA_SS_SERVER_TYPE なし なし SQL_SS_TYPE_SMALLDATETIME SQL_SS_TYPE_DATETIME SQL_SS_TYPE_DEFAULT なし

値の範囲に不連続性がある場合があります。 たとえば、8,10..16 では 9 がありません。 有効桁数が 0 より大きい場合は、小数点が追加されるためです。

datetime2 は、 smalldatetimedatetime の型名として返されます。これは、ドライバーが、すべての SQL_TYPE_TIMESTAMP 値をサーバーに送信するための共通の型として使用するためです。

SQL_CA_SS_VARIANT_SQL_TYPEは新しい記述子フィールドです。 このフィールドは IRD および IPD に追加され、アプリケーションで sqlvariant (SQL_SSVARIANT) 列とパラメーターに関連付けられている値の型を指定できます

SQL_CA_SS_SERVER_TYPEは、SQL_TYPE_TYPETIMESTAMP (または C 型のSQL_C_TYPE_TIMESTAMPでSQL_SS_VARIANTとして) バインドされたパラメーターの値をサーバーに送信する方法をアプリケーションが制御できるようにする新しい IPD 専用フィールドです。 sqlExecute または SQLExecDirect が呼び出されたときにSQL_DESC_CONCISE_TYPEがSQL_TYPE_TIMESTAMP (またはSQL_SS_VARIANTで C 型がSQL_C_TYPE_TIMESTAMP) 場合、SQL_CA_SS_SERVER_TYPEの値によって、パラメーター値の表形式データ ストリーム (TDS) 型が次のように決定されます。

SQL_CA_SS_SERVER_TYPEの値 SQL_DESC_PRECISIONの有効な値 SQL_DESC_LENGTHの有効な値 TDS の種類
SQL_SS_TYPE_DEFAULT 0..7 19、21..27 datetime2
SQL_SS_TYPE_SMALLDATETIME 0 19 smalldatetime
SQL_SS_TYPE_DATETIME 3 23 datetime

SQL_CA_SS_SERVER_TYPEの既定の設定はSQL_SS_TYPE_DEFAULTです。 SQL_DESC_PRECISIONとSQL_DESC_LENGTHの設定は、上記の表に示すように、SQL_CA_SS_SERVER_TYPEの設定で検証されます。 この検証が失敗すると、SQL_ERRORが返され、SQLState 07006 と "Restricted data type attribute violation" というメッセージで診断レコードがログに記録されます。 このエラーは、SQL_CA_SS_SERVER_TYPEが SQL_SS_TYPE DEFAULT 以外の値に設定されていて、DESC_CONCISE_TYPEがSQL_TYPE_TIMESTAMPされていない場合にも返されます。 これらの検証は、記述子の整合性検証が行われるときに実行されます。次に例を示します。

  • SQL_DESC_DATA_PTRが変更されたとき。

  • 準備時または実行時 (SQLExecute、SQLExecDirect、SQLSetPos、または SQLBulkOperations が呼び出されたとき)。

  • 遅延準備を無効にして SQLPrepare を呼び出すか、準備されているが実行されないステートメントに対して SQLNumResultCols、SQLDescribeCol、または SQLDescribeParam を呼び出すことによって、アプリケーションが非遅延準備を強制する場合。

SQLSetDescField の呼び出しによってSQL_CA_SS_SERVER_TYPEが設定されている場合、その値はSQL_SS_TYPE_DEFAULT、SQL_SS_TYPE_SMALLDATETIME、またはSQL_SS_TYPE_DATETIMEである必要があります。 そうでない場合は、SQL_ERRORが返され、SQLState HY092 と "無効な属性/オプション識別子" というメッセージで診断レコードがログに記録されます。

SQL_CA_SS_SERVER_TYPE属性は、 datetime および smalldatetimeでサポートされている機能に依存するアプリケーションで使用できますが、 datetime2では使用できません。 たとえば、 datetime2 では dateadd 関数と datediif 関数を使用する必要があります。一方、 datetimesmalldatetime では算術演算子も使用できます。 ほとんどのアプリケーションでは、この属性を使用する必要はありません。また、その使用は避ける必要があります。

IRD フィールドで返される情報

IRD フィールドには、次の情報が返されます。

列の種類 日付 時間 smalldatetime(スモールデイトタイム) datetime datetime2 datetimeoffset (デイトタイムオフセット)
SQL_DESC_AUTO_UNIQUE_VALUE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CASE_SENSITIVE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CONCISE_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_TYPE_TIMESTAMP(SQLのタイムスタンプ型) SQL_SS_TIMESTAMPOFFSET (タイムスタンプオフセット)
SQL_DESC_DATETIME_INTERVAL_CODE SQL_CODE_DATE 0 SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP 0
SQL_DESC_DATETIME_INTERVAL_PRECISION 10 8,10..16 16 23 19、21..27 26、28..34
SQL_DESC_DISPLAY_SIZE 10 8,10..16 16 23 19、21..27 26、28..34
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_LENGTH 10 8,10..16 16 2 19、21..27 26、28..34
SQL_DESC_LITERAL_PREFIX ' ' ' ' ' '
SQL_DESC_LITERAL_SUFFIX ' ' ' ' ' '
SQL_DESC_LOCAL_TYPE_NAME date time smalldatetime datetime datetime2 datetimeoffset (デイトタイムオフセット)
SQL_DESC_OCTET_LENGTH 6 12 4 8 16 20
SQL_DESC_PRECISION 0 0..7 0 3 0..7 0..7
SQL_DESC_SCALE 0 0..7 0 3 0..7 0..7
SQL_DESC_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE
SQL_DESC_TYPE SQL_DATETIME SQL_SS_TIME2 SQL_DATETIME SQL_DATETIME SQL_DATETIME SQL_SS_TIMESTAMPOFFSET (タイムスタンプオフセット)
SQL_DESC_TYPE_NAME date time smalldatetime datetime datetime2 datetimeoffset (デイトタイムオフセット)
SQL_DESC_UNSIGNED SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE

こちらもご覧ください

メタデータ (ODBC)