2011-08-03 58 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()函數,因此可能不會因這些值進行任何更改,因此不會觸發該觸發器。

如果您沒有觸發器,請查找上述示例查詢的示例,然後仔細檢查它們是否永遠不會返回多個值。