2010-02-12 54 views
1

我对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。我在连接手柄上尝试了不同的游标属性,但无济于事。

非常感谢帮助!

+0

有没有可以用来执行SQL语句而不是查询的函数?根据定义,查询返回结果。所以你需要执行SQL但不返回结果的功能。 – 2010-02-12 21:48:29

+0

我不明白这将如何帮助我。我的问题是我无法获取由我的ODBC应用程序中的SELECT创建的结果集的行。我确实需要一个结果集,而不仅仅是执行SQL。我不确定你是什么意思。 – Timo 2010-02-12 21:56:17

回答

0

问题在于语句中的可滚动游标设置,更改为不可滚动的游标解决了问题。

+0

所以请接受它作为正确的答案,因此我们可以很容易地看到它解决了 – bluish 2012-06-18 08:37:29

相关问题