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 
相关问题