SQLDescribeCol
実行されたステートメントの場合、SQL Server Native Client ODBC ドライバーは、サーバーにクエリを実行して結果セット内の列を記述する必要はありません。 この場合、 SQLDescribeCol
はサーバーのラウンドトリップを引き起こしません。 SQLColAttribute と同様に、準備されたが実行されていないステートメントで を呼び出SQLDescribeCol
すと、サーバーラウンドトリップが生成されます。
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 User-Defined型 (ODBC)」を参照してください。