我有一個調用存儲過程(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()函數,因此可能不會因這些值進行任何更改,因此不會觸發該觸發器。
如果您沒有觸發器,請查找上述示例查詢的示例,然後仔細檢查它們是否永遠不會返回多個值。
如果你想要一個答案,修改你的過程,併發布在這裏。 –
沒有**看到**你在做什麼,沒有辦法來幫助,真的......試着減少你的存儲過程到一個最小版本,也顯示這個問題,並張貼在這裏... –