gpt4 book ai didi

c++ - ODBC Execute/Fetch of SQL 2005 存储过程结果集不能使用表@variable

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:56 25 4
gpt4 key购买 nike

我在 SQL Server 2005( native 客户端)上使用 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。我在连接句柄上尝试了不同的游标属性,但无济于事。

非常感谢您的帮助!

最佳答案

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

关于c++ - ODBC Execute/Fetch of SQL 2005 存储过程结果集不能使用表@variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com