SQLDescribeCol
実行済みのステートメントに対しては、SQL Server Native Client ODBC ドライバーでは、サーバーをクエリして結果セット内の列を示す必要はありません。 この場合、SQLDescribeCol を呼び出しても、サーバーとのやり取りは行われません。 SQLColAttribute や SQLNumResultCols と同様に、準備されていても実行されていないステートメントで SQLDescribeCol を呼び出すと、サーバーとのやり取りが行われます。
1 つの Transact-SQL ステートメントまたはステートメント バッチから複数の結果行セットが返される場合、別のテーブルの列を序数で参照したり、結果セット内の別の列を参照することができます。 SQLDescribeCol は、セットごとに呼び出す必要があります。 結果セットが変更されると、アプリケーションでは、行の結果をフェッチする前に、データ値を再バインドする必要があります。 複数の結果セットを返す処理の詳細については、「SQLMoreResults」を参照してください。
準備された SQL ステートメントのバッチによって複数の結果セットが生成されるときは、最初の結果セットの列属性のみが報告されます。
大きな値データ型の場合、DataTypePtr に返される値は、SQL_VARCHAR、SQL_VARBINARY、SQL_NVARCHAR のいずれかになります。 ColumnSizePtr の値 SQL_SS_LENGTH_UNLIMITED は、サイズが "無制限" であることを示します。
SQL Server 2012 以降のデータベース エンジンの機能強化により、期待される結果のより正確な記述を SQLDescribeCol で取得できるようになりました。 こうした正確性の増した結果は、以前のバージョンの SQL Server の SQLDescribeCol によって返される結果とは異なる可能性があります。 詳細については、「メタデータの検出」を参照してください。
SQLDescribeCol による機能強化された日付と時刻のサポート
日付型または時刻型に対して返される値を次に示します。
DataTypePtr |
ColumnSizePtr |
DecimalDigitsPtr |
|
---|---|---|---|
datetime |
SQL_TYPE_TIMESTAMP |
23 |
3 |
smalldatetime |
SQL_TYPE_TIMESTAMP |
16 |
0 |
date |
SQL_TYPE_DATE |
10 |
0 |
time |
SQL_SS_TIME2 |
8, 10..16 |
0..7 |
datetime2 |
SQL_TYPE_TIMESTAMP |
19, 21..27 |
0..7 |
datetimeoffset |
SQL_SS_TIMESTAMPOFFSET |
26, 28..34 |
0..7 |
詳細については、「日付/時刻の強化 (ODBC)」を参照してください。
SQLDescribeCol による大きな CLR UDT のサポート
SQLDescribeCol は、大きな CLR ユーザー定義型 (UDT) をサポートしています。 詳細については、「大きな CLR ユーザー定義型 (ODBC)」を参照してください。