2011-08-03 55 views
0

我有一个调用存储过程(SQL Server 2008)的.net应用程序。到SP该呼叫与该错误消息存储过程不执行ASP .NEt

失败“子查询返回大于1倍的值。该 当子查询跟随这是不允许=,!=,<,< =,>,> =,或当子查询被用作 的一个表达式。“

但是当我从SQL Server 2008客户端手动执行SP并使用与上面相同的参数时,我没有任何问题。

任何人都可以帮助解决这个问题吗?

由于安全原因,我不能在这里发布我的SP。

+2

如果你想要一个答案,修改你的过程,并发布在这里。 –

+1

没有**看到**你在做什么,没有办法来帮助,真的......试着减少你的存储过程到一个最小版本,也显示这个问题,并张贴在这里... –

回答

0

如果您存储过程返回值,并且您想要获取此值,则需要在第一个过程字符串中使用SET NOCOUNT ON

编辑:抱歉,我不明白的问题。答案是错的。

+0

嗨,它已启用SET NOCOUNT。是的,我正在捕获SP的返回值。任何其他建议 –

+0

我认为我们需要看代码... –

0

听起来像描述的问题here

您可以在存储过程正在修改的表上创建触发器,并对其进行编码,以期望只修改单个记录。

也许你有这样的:

declare @XYZ int 
select @XYZ = FieldA from inserted 

如果您的更新修改多条记录,则该语句将失败与错误信息。

除非SP本身检查环境值,例如在SSMS中运行不会失败。当前用户来自suser_sname()函数,因此可能不会因这些值进行任何更改,因此不会触发该触发器。

如果您没有触发器,请查找上述示例查询的示例,然后仔细检查它们是否永远不会返回多个值。