テーブル値パラメータの記述子フィールド
テーブル値パラメータのサポートには、ODBC アプリケーション パラメータ記述子 (APD) および実装パラメータ記述子 (IPD) の新しい SQL Server 固有のフィールドが含まれます。
解説
名前 |
場所 |
型 |
説明 |
---|---|---|---|
SQL_CA_SS_TYPE_NAME |
IPD |
SQLTCHAR* |
テーブル値パラメータのサーバーの型名です。 テーブル値パラメータの型名を SQLBindParameter の呼び出しで指定する場合、ANSI アプリケーションとしてビルドされているアプリケーションであっても、常に Unicode 値として指定する必要があります。パラメータ StrLen_or_IndPtr に使用する値は、SQL_NTS であるか、または名前の文字列長に sizeof(WCHAR) を掛けた値である必要があります。 テーブル値パラメータの型名を SQLSetDescField を使用して指定する場合、アプリケーションのビルド方法に準拠したリテラルを使用できます。ODBC ドライバ マネージャで、必要な Unicode 変換を実行します。 |
SQL_CA_SS_TYPE_CATALOG_NAME (読み取り専用) |
IPD |
SQLTCHAR* |
型が定義されているカタログです。 |
SQL_CA_SS_TYPE_SCHEMA_NAME |
IPD |
SQLTCHAR* |
型が定義されているスキーマです。 |
アプリケーションでは、テーブル値パラメータの SQL_CA_SS_TYPE_CATALOG_NAME を設定できません。これを設定すると、SQL_ERROR が返され、"記述子フィールドの識別子が正しくありません" というメッセージで SQLSTATE = HY091 の診断レコードが記録されます。
次のステートメント属性および記述子のヘッダー フィールドは、テーブル値パラメータにフォーカスが設定されている場合に適用されます。
名前 |
場所 |
型 |
説明 |
---|---|---|---|
SQL_ATTR_PARAMSET_SIZE (APD の SQL_DESC_ARRAY_SIZE に相当) |
APD |
SQLUINTEGER |
テーブル値パラメータのバッファ配列のサイズです。これは、バッファが保持できる最大行数、または行内のバッファのサイズです。テーブル値パラメータの値自体には、バッファで保持できるよりも多い (または少ない) 行が含まれる場合があります。既定値は 1 です。
注
SQL_SOPT_SS_PARAM_FOCUS が既定値 0 に設定されている場合は、SQL_ATTR_PARAMSET_SIZE はステートメントを参照し、パラメータ セットの数を指定します。SQL_SOPT_SS_PARAM_FOCUS がテーブル値パラメータの序数に設定されている場合は、テーブル値パラメータを参照し、テーブル値パラメータのパラメータ セットごとの行数を指定します。
|
SQL_ATTR_PARAM _BIND_TYPE |
APD |
SQLINTEGER |
既定値は SQL_PARAM_BIND_BY_COLUMN です。 行方向のバインドを選択するには、このフィールドに、構造体の長さ、または一連のテーブル値パラメータの行のバインドされるバッファのインスタンスの長さが設定されます。この長さには、バインドされたすべての列の領域と、構造体またはバッファの埋め込みを含める必要があります。これにより、バインドされた列のアドレスが指定の長さでインクリメントされると、結果は、次の行の同じ列の先頭を指すようになります。ANSI C の sizeof 演算子を使用すると、この動作が保証されます。 |
SQL_ATTR_PARAM_BIND_OFFSET_PTR |
APD |
SQLINTEGER* |
既定値は NULL ポインタです。 このフィールドが NULL 以外の場合、ドライバはポインタを逆参照し、逆参照された値を記述子レコードの遅延された各フィールド (SQL_DESC_DATA_PTR、SQL_DESC_INDICATOR_PTR、および SQL_DESC_OCTET_LENGTH_PTR) に追加して、新しいポインタ値を使用してデータ値にアクセスします。 |
これらのフィールドは、テーブル値パラメータでのみ有効です。それ以外のデータ型の場合は無視されます。
ストアド プロシージャを呼び出す場合、SQL_CA_SS_TYPE_NAME は省略可能です。サーバー側でテーブル値パラメータの型を特定できるようなプロシージャの呼び出しでない場合は、SQL ステートメントで SQL_CA_SS_TYPE_NAME を指定する必要があります。
型名が必要で、テーブル値パラメータのテーブル型がストアド プロシージャとは異なるスキーマで定義されている場合、SQL_CA_SS_TYPE_SCHEMA_NAME を実装パラメータ記述子 (IPD) で指定する必要があります。指定しないと、サーバーでテーブル値パラメータの型を特定できません。これにより、SQLExecute または SQLExecDirect の呼び出し時にエラーが発生します。エラーは SQLSTATE= 07006 で、メッセージは "データ型の属性に関する制限に違反しました" になります。
テーブル値パラメータの列では、行方向のバインドまたは列方向のバインドを使用できます。既定では、列方向のバインドが使用されます。行方向のバインドは、SQL_ATTR_PARAM_BIND_TYPE および SQL_ATTR_ PARAM_BIND_OFFSET_PTR を設定することで指定できます。これは、列およびパラメータの行方向のバインドと似ています。
SQL_CA_SS_TYPE_CATALOG_NAME および SQL_CA_SS_TYPE_SCHEMA_NAME を使用すると、CLR ユーザー定義型パラメータに関連付けられたカタログとスキーマも取得できます。これらは、CLR ユーザー定義型の既存の型固有のカタログ スキーマの属性の代わりに使用します。