1

我想在 SQL Server 2012 上创建一个临时表并批量插入其中。我并不总是知道创建临时表的参数类型,因此我需要调用 SQLDescribeParam 以便绑定参数。从http://msdn.microsoft.com/en-us/library/ms710188(v=vs.85).aspx复制 SQLDescribeParam 的示例代码后,我正在使用以下精简代码

下面的代码非常适合针对 SQL Server 2012 的“SQL Server Native Client 10.0”ODBC 驱动程序,并且我能够绑定参数并插入到临时表中。但是“SQL Server Native Client 11.0”驱动程序的 SQLDescribeParam 调用失败,并出现以下两个错误:

Error record 1:
Description: '[Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name '#myTemp'.'
SQL State: 42S02
Native Error: 208

Error record 2:
Description: '[Microsoft][SQL Server Native Client 11.0][SQL Server]The batch could not be analyzed because of compile errors.'
SQL State: 42000
Native Error: 11501

我需要做什么才能让 SQLDescribeParam 在“SQL Server Native Client 11.0”上运行?

我在 Windows 7 上使用 64 位“SQL Server Native Client”驱动程序。

代码如下:

SQLSMALLINT   NumParams, i, DataType, DecimalDigits, Nullable;
SQLULEN  ParamSize;
SQLWCHAR strCreateQuery[] = L"CREATE TABLE [#myTemp] ( mycol INT)";
SQLWCHAR strInsertQuery[] = L"INSERT INTO [#myTemp] ([mycol]) VALUES (?)";
SQLHSTMT hstmt;

{ // Create temp table #myTemp
// Allocate hstmt
SQLExecDirectW( hstmt, strCreateQuery, SQL_NTS );
// Deallocate hstmt
}

// Allocate hstmt
SQLPrepare(hstmt, strInsertQuery, SQL_NTS);
SQLNumParams(hstmt, &NumParams);

if (NumParams) {

for (i = 0; i < NumParams; i++) {
    // Describe the parameter.
    SQLDescribeParam(hstmt, i + 1, &DataType, &ParamSize, &DecimalDigits, &Nullable) );
}
}
// Deallocate hstmt
4

0 回答 0