テーブル値パラメーター用の 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 の診断レコードが生成されます。このエラーは、SQLSetDescField、SQLSetDescRec、または 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 でも発生します。
テーブル値パラメーターの列の値には、パラメーターおよび結果列と同じデータ変換オプションが設定されています。
テーブル値パラメーターは入力パラメーターにのみ指定できます。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 の診断レコードがステートメントに追加されます。