我在写一些更新表的代码。取决于用户想要做什么,它要么更新一大组记录,要么更小一些。划分因素是一个组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