我有一个调用存储过程(SQL Server 2008)的.net应用程序。到SP该呼叫与该错误消息存储过程不执行ASP .NEt
失败“子查询返回大于1倍的值。该 当子查询跟随这是不允许=,!=,<,< =,>,> =,或当子查询被用作 的一个表达式。“
但是当我从SQL Server 2008客户端手动执行SP并使用与上面相同的参数时,我没有任何问题。
任何人都可以帮助解决这个问题吗?
由于安全原因,我不能在这里发布我的SP。
我有一个调用存储过程(SQL Server 2008)的.net应用程序。到SP该呼叫与该错误消息存储过程不执行ASP .NEt
失败“子查询返回大于1倍的值。该 当子查询跟随这是不允许=,!=,<,< =,>,> =,或当子查询被用作 的一个表达式。“
但是当我从SQL Server 2008客户端手动执行SP并使用与上面相同的参数时,我没有任何问题。
任何人都可以帮助解决这个问题吗?
由于安全原因,我不能在这里发布我的SP。
如果您存储过程返回值,并且您想要获取此值,则需要在第一个过程字符串中使用SET NOCOUNT ON
。
编辑:抱歉,我不明白的问题。答案是错的。
嗨,它已启用SET NOCOUNT。是的,我正在捕获SP的返回值。任何其他建议 –
我认为我们需要看代码... –
听起来像描述的问题here。
您可以在存储过程正在修改的表上创建触发器,并对其进行编码,以期望只修改单个记录。
也许你有这样的:
declare @XYZ int
select @XYZ = FieldA from inserted
如果您的更新修改多条记录,则该语句将失败与错误信息。
除非SP本身检查环境值,例如在SSMS中运行不会失败。当前用户来自suser_sname()函数,因此可能不会因这些值进行任何更改,因此不会触发该触发器。
如果您没有触发器,请查找上述示例查询的示例,然后仔细检查它们是否永远不会返回多个值。
如果你想要一个答案,修改你的过程,并发布在这里。 –
没有**看到**你在做什么,没有办法来帮助,真的......试着减少你的存储过程到一个最小版本,也显示这个问题,并张贴在这里... –