我正在致力於將調用一個簡單的存儲過程的ASP.NET應用程序。 SP看起來像這樣:傳遞參數,將返回所有行
Select *
from empTable
where ID = @ID AND Department = @DeptID
and status = @status
and role = @role
ASP.NET應用程序將傳遞一個值給存儲過程中的每個參數。每個參數都可以爲null或有一個值。但是,如果用戶輸入任何內容(空或空),它應該返回empTable
中的所有內容,就像Select * from empTable
沒有Where
子句一樣。
然而,由於從管理的命令:
- 我不能改變在ASP.NET應用程序的代碼。
- 我不能使用動態SQL。
- 我只能修改存儲過程。
有什麼辦法可以解決這個問題嗎?
請問你可以向我解釋ID = ISNULL(@ID,ID)的部分;據我的理解,如果x爲null,ISNULL(x,y)將返回值y。但是在這種情況下,我們從不指定ID的值,它如何知道要替換的值是什麼? –
因爲當參數在proc定義中定義時,它被定義爲具有NULL的默認值。如果你沒有通過,它會採用默認值。 –
如果@ID爲NULL,則它將用empTable中的ID替換該值。所以ID = ID或columnX = columnX,它總是爲真,因此它返回所有行。 – JodyT