我有一个调用存储过程的.net应用程序(SQL Server 2008)。对SP的调用失败,并显示错误消息
“子查询返回的值超过1。当这个值不允许时 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。“
但是当我使用与上面相同的参数从SQL Server 2008客户端手动执行SP时,我没有任何问题。
任何人都可以帮忙解决这个问题吗?
出于安全原因,我无法在此发布我的SP。
答案 0 :(得分:0)
如果存储过程返回值,并且您想获取此值,
您需要在第一个过程字符串中使用SET NOCOUNT ON
。
答案 1 :(得分:0)
听起来像here所描述的问题。
您可以在存储过程正在修改的表上触发一个触发器,并对其进行编码,以期只修改一条记录。
也许你有类似的东西:
declare @XYZ int
select @XYZ = FieldA from inserted
如果您的更新修改了多条记录,则此语句将失败并显示错误消息。
除非SP本身检查环境值,否则没有理由为什么SSMS中的运行不会失败。来自suser_sname()函数的当前用户,因此可能不会因为这些值而进行任何更改,因此不会触发触发器。
如果您没有触发器,请查看上面的示例查询示例,并仔细检查它们是否永远不会返回多个值。