我在寫一些更新表的代碼。取決於用戶想要做什麼,它要麼更新一大組記錄,要麼更小一些。劃分因素是一個組ID。可選SQL 2008存儲過程中的子句/參數?
用戶可以選擇是更新所有記錄的表,還是隻更新具有該組ID的表。我想爲兩個實例使用相同的存儲過程,也許有一些邏輯來區分這兩種情況。 (我寧願不寫有90%相同代碼的兩個存儲的特效。)
我在存儲過程不是專家,我不知道如果我能在可選的參數傳遞,或者如何動態生成的一部分where子句,取決於groupID是否存在。歡迎任何建議。
謝謝!
我在寫一些更新表的代碼。取決於用戶想要做什麼,它要麼更新一大組記錄,要麼更小一些。劃分因素是一個組ID。可選SQL 2008存儲過程中的子句/參數?
用戶可以選擇是更新所有記錄的表,還是隻更新具有該組ID的表。我想爲兩個實例使用相同的存儲過程,也許有一些邏輯來區分這兩種情況。 (我寧願不寫有90%相同代碼的兩個存儲的特效。)
我在存儲過程不是專家,我不知道如果我能在可選的參數傳遞,或者如何動態生成的一部分where子句,取決於groupID是否存在。歡迎任何建議。
謝謝!
您可以使用此或 「OR」 contsruct
... WHERE GroupID = ISNULL(@GroupdID, GroupID)
... WHERE GroupID = @GroupdID OR @GroupdID IS NULL
create procedure MyProc (@GroupID int = null)
as
begin
update MyTable set ....
where @GroupID is null or GroupID = @GroupID
end
謝謝。這是行得通的,但我對語法有點困惑。如果我傳入@GroupID值,SQL是否忽略「OR @GroupID IS NULL」位? – larryq 2009-11-12 17:22:53
是的。如果你傳入「42」,那麼「42 IS NULL」的計算結果爲false。只有「GroupID = 42」條件決定發生了什麼 – gbn 2009-11-12 18:06:13