4

我在寫一些更新表的代碼。取決於用戶想要做什麼,它要麼更新一大組記錄,要麼更小一些。劃分因素是一個組ID。可選SQL 2008存儲過程中的子句/參數?

用戶可以選擇是更新所有記錄的表,還是隻更新具有該組ID的表。我想爲兩個實例使用相同的存儲過程,也許有一些邏輯來區分這兩種情況。 (我寧願不寫有90%相同代碼的兩個存儲的特效。)

我在存儲過程不是專家,我不知道如果我能在可選的參數傳遞,或者如何動態生成的一部分where子句,取決於groupID是否存在。歡迎任何建議。

謝謝!

回答

10

您可以使用此或 「OR」 contsruct

... WHERE GroupID = ISNULL(@GroupdID, GroupID) 


... WHERE GroupID = @GroupdID OR @GroupdID IS NULL 
+0

謝謝。這是行得通的,但我對語法有點困惑。如果我傳入@GroupID值,SQL是否忽略「OR @GroupID IS NULL」位? – larryq 2009-11-12 17:22:53

+0

是的。如果你傳入「42」,那麼「42 IS NULL」的計算結果爲false。只有「GroupID = 42」條件決定發生了什麼 – gbn 2009-11-12 18:06:13

2
create procedure MyProc (@GroupID int = null) 
as 
begin 
    update MyTable set .... 
    where @GroupID is null or GroupID = @GroupID 
end 
相關問題