2

ODBC を使用して、テーブル値パラメーターをストアド プロシージャのパラメーターとして渡そうとしています。MSDN の例に従いましたが、SQLBindParameterを呼び出すと次のエラーが表示されます。

HY004 [Microsoft][ODBC SQL Server Driver]無効な SQL データ型

これが私のコードです。

//Allocate stament handle
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);

//Prep command
SQLPrepare(hStmt, (SQLCHAR*)"{call myStoredProc(?)}", SQL_NTS)

//Variables
const int arraySize = 2;
const int varcharSize = 30;
SQLCHAR *myUserDefTableName = (SQLCHAR *) "myUserDefTableName";
SQLLEN     myUserDefTableInd = 0;



//bind table item

int result = SQLBindParameter(hStmt, 
  1,// ParameterNumber
  SQL_PARAM_INPUT,// InputOutputType
  SQL_C_DEFAULT,// ValueType 
  SQL_SS_TABLE,// Parametertype
  (SQLINTEGER)arraySize,// ColumnSize - for a TVP this the row array size
  0,// DecimalDigits - for a TVP this is the number of columns in the TVP 
  (SQLPOINTER)myUserDefTableName,// ParameterValuePtr - for a TVP this is       the type name of the TVP
  SQL_NTS,// BufferLength - for a TVP this is the length of the type name or SQL_NTS
  &myUserDefTableInd);// StrLen_or_IndPtr - for a TVP this is the number of rows available

//bind columns for the table-valued parameter 
//and execute command
...

MSDN でもこれを見つけました。

テーブル値パラメーター列は、SQL_SS_TABLE 型としてバインドできません。ParameterType を SQL_SS_TABLE に設定して SQLBindParameter を呼び出すと、SQL_ERROR が返され、SQLSTATE=HY004、「無効な SQL データ型」で診断レコードが生成されます。これは、SQLSetDescField および SQLSetDescRec でも発生する可能性があります。

しかし、テーブルの列ではなく、テーブルの項目をバインドしようとしています。これは、コード例で述べられていることとほとんど矛盾しているようです。このエラーが発生する理由がわかりません。何か案は?

どうもありがとう。

4

2 に答える 2

1

ODBC がバージョン 3.x に設定されていますか? 呼び出しの直後にこれを試して、ステートメント ハンドルを取得します。

 SQLHENV  hEnv  = SQL_NULL_HENV;
 SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv); 

 SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
于 2015-08-27T02:39:56.283 に答える