首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pdo在执行存储过程时返回SQL错误“无活动字段”。

pdo在执行存储过程时返回SQL错误“无活动字段”。
EN

Stack Overflow用户
提问于 2014-11-05 17:49:25
回答 1查看 1.1K关注 0票数 0

我的存储过程从Management执行100%很好,但是当使用try catch块运行PDO时,我得到以下异常消息: SQLSTATEIMSSP:查询的活动结果不包含任何字段。

我已经尝试了经典的sections (这让我在前面就知道了)来停止它返回行计数,并且我已经通过删除SP的部分完成了各种测试,直到我找到了错误在哪个部分。我也尝试过PHP (),但没有成功。

存储过程:我声明一个游标(震惊,恐怖,我知道!)然后迭代一些结果,这本身不会导致任何问题--但实际上,这个游标必须为游标中的每个提取运行各种存储过程本身,当我介绍这些存储过程时,也就是问题出现的时候。

我已经通过了SPs内的光标,并设置了NOCOUNT对他们,以防这可能是问题,但没有运气。其中一个或两个SPs具有输出,但它们相应地在变量中捕获。

有人有什么想法吗?我不希望发布该项目的任何代码,但在游标块中执行的一些命令场景如下:

代码语言:javascript
复制
SELECT @varName = columnName FROM dbo.tableName

SET @varName = (SELECT columnName FROM dbo.tableName)

EXEC dbo.storedProcedure @outputVar OUTPUT

我最好的猜测是最好的例子是问题,但我不知道知道。我想定位错误而不逐个删除这些错误,因为整个过程执行的操作很难回滚到我的测试数据库中,而且每一行对于获得正确的输出都很重要。

谢谢您提供的任何帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 12:02:39

我现在已经解决了这个问题!希望该解决方案将帮助其他遇到此错误或类似问题的人。

问题是,SQL Server存储过程中使用了嵌套游标(游标中的游标)。我的主要过程(由PDO从PHP调用)打开一个游标,然后在该游标内运行其他存储过程,从而打开自己的游标。

在中运行查询时,此方法工作良好,但通过PDO从PHP调用失败。

虽然我知道大多数SQL迷认为使用游标是不好的做法,但不幸的是,我继承了这些存储过程,所以我要从自己身上消除所有的指责!

实际的解决方案是使用以下代码将原始存储过程( PHP调用的游标替换为调用其他SPs的存储过程)中的游标替换为with循环:

代码语言:javascript
复制
DECLARE @loopTable table (id int IDENTITY(1,1), dataColumn)
DECLARE @id int
DECLARE @rows int
DECLARE @data int -- var to hold targeted data in the loop

INSERT INTO @loopTable (dataColumn)
SELECT dataColumn FROM dataTable

SELECT @rows = COUNT(1) FROM @loopTable
WHILE (@rows > 0)
BEGIN
    SELECT TOP 1 @data = dataColumn, @id = id FROM @loopTable

    // Do stuff with @data variable here

    DELETE FROM @loopTable where id = @id
    SELECT @rows = COUNT(1) from @loopTable
END

问题解决了,噩梦来找!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26763777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档