SQL 2008存储过程中的可选where子句/参数?

时间:2009-11-12 16:10:46

标签: sql sql-server sql-server-2008 stored-procedures optional-parameters

我正在编写一些更新表的代码。根据用户想要做的事情,它可以更新大量记录,也可以更小。描绘因子是组ID。

用户可以选择是为所有记录更新表,还是仅为具有该groupID的记录更新表。我想对两个实例使用相同的存储过程,可能有一点逻辑来区分这些场景。 (我不希望用90%相同的代码编写两个存储过程。)

我不是存储过程的专家,我不确定是否可以传入可选参数,或者如何动态生成where子句的一部分,具体取决于groupID是否存在。欢迎任何建议。

谢谢!

2 个答案:

答案 0 :(得分:10)

您可以使用此或“OR”构造

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


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

答案 1 :(得分:2)

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