我对SQL Server 2005(本机客户端)使用ODBC和C++。
我有以下简单的测试存储过程返回恒定值的两行:ODBC执行/读取SQL 2005存储过程结果集不能使用表@variable
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。我在连接手柄上尝试了不同的游标属性,但无济于事。
非常感谢帮助!
有没有可以用来执行SQL语句而不是查询的函数?根据定义,查询返回结果。所以你需要执行SQL但不返回结果的功能。 – 2010-02-12 21:48:29
我不明白这将如何帮助我。我的问题是我无法获取由我的ODBC应用程序中的SELECT创建的结果集的行。我确实需要一个结果集,而不仅仅是执行SQL。我不确定你是什么意思。 – Timo 2010-02-12 21:56:17