次の方法で共有


テーブル値パラメータ用の ODBC SQL 型

テーブル値パラメータは、新しい ODBC SQL 型である SQL_SS_TABLE でサポートされます。

解説

SQL_SS_TABLE は、他の ODBC データ型または SQL Server データ型に変換できません。

SQLBindParameter の ValueType パラメータで SQL_SS_TABLE を C データ型として使用するか、アプリケーション パラメータ記述子 (APD) レコードの SQL_DESC_TYPE を SQL_SS_TABLE に設定しようとすると、SQL_ERROR が返され、"アプリケーションのバッファ型が無効です" というメッセージで SQLSTATE=HY003 の診断レコードが生成されます。

IPD レコードで SQL_DESC_TYPE を SQL_SS_TABLE に設定し、対応するアプリケーション パラメータ記述子レコードが SQL_C_DEFAULT ではない場合、SQL_ERROR が返され、"アプリケーションのバッファ型が無効です" というメッセージで SQLSTATE=HY003 の診断レコードが生成されます。このエラーは、SQLSetDescFieldSQLSetDescRec、または SQLBindParameter の ParameterType で発生します。

SQLGetData の呼び出し時に TargetType パラメータが SQL_SS_TABLE の場合、SQL_ERROR が返され、"アプリケーションのバッファ型が無効です" というメッセージで SQLSTATE=HY003 の診断レコードが生成されます。

テーブル値パラメータの列は、SQL_SS_TABLE 型としてバインドできません。ParameterType を SQL_SS_TABLE に設定した状態で SQLBindParameter を呼び出すと、SQL_ERROR が返され、"SQL データ型が無効です" というメッセージで SQLSTATE=HY004 の診断レコードが生成されます。このエラーは、SQLSetDescField および SQLSetDescRec でも発生します。

テーブル値パラメータの列の値には、パラメータおよび結果列と同じデータ変換オプションが設定されています。

SQL Server 2008 では、テーブル値パラメータは入力パラメータにしかなりません。SQLBindParameter または SQLSetDescField によって SQL_DESC_PARAMETER_TYPE を SQL_PARAM_INPUT 以外の値に設定しようとすると、SQL_ERROR が返され、"パラメータの型が無効です" というメッセージで SQLSTATE=HY105 の診断レコードがステートメントに追加されます。

行ごとの既定値はテーブル値パラメータでサポートされないので、テーブル値パラメータの列では、StrLen_or_IndPtr に SQL_DEFAULT_PARAM を使用できません。代わりに、アプリケーションで列の属性 SQL_CA_SS_COL_HAS_DEFAULT_VALUE を 1 に設定できます。つまり、この列にすべての行の既定値が含まれます。StrLen_or_IndPtr を SQL_DEFAULT_PARAM に設定すると、SQLExecute または SQLExecDirect によって SQL_ERROR が返され、"文字列長またはバッファ長が正しくありません" というメッセージで SQLSTATE=HY090 の診断レコードがステートメントに追加されます。