我对 SQL Server 2005(本机客户端)使用 ODBC 和 C++。
我有以下简单的测试存储过程,它返回两行常量值:
CREATE PROCEDURE usp_testme AS BEGIN
declare @details table( one int, two int, three int, four int )
insert @details SELECT 1 one, 2 two, 3 three, 4 four UNION SELECT 5, 6, 7, 8
select one, two, three, four from @details
END
ODBC 代码如下所示(简化):
SQLExecDirect( m_hstmt, (SQLCHAR *)"{CALL usp_testme}", SQL_NTS );
SQLFetch( m_hstmt );
SQLExecDirect() 调用返回以下信息:
INFO: 16954 : 01000 : [Microsoft etc]Executing SQL directly; no cursor
然后 SQLFetch() 调用给出:
INFO: 0 : 24000 : [Microsoft etc]Invalid cursor state
ODBC 参考文档告诉我的是我没有结果集。
所以我将存储过程更改为以下内容(例如,不使用表变量):
CREATE PROCEDURE usp_testme AS BEGIN
SELECT 1 one, 2 two, 3 three, 4 four UNION SELECT 5, 6, 7, 8
END
瞧,它有效。当然这是一个简单的测试程序,我需要执行的真正的SQL比较复杂,需要表变量,不用赘述。但是为什么不能针对第一个 SP 的结果集创建 (ODBC) 游标呢?
有谁知道如何让它工作?顺便说一句,我在环境句柄上声明 ODBC v3。我在连接句柄上尝试了不同的游标属性,但无济于事。
非常感谢您的帮助!