【问题标题】:Optional where clause / parameter in a SQL 2008 stored proc?SQL 2008 存储过程中的可选 where 子句/参数?
【发布时间】:2010-12-15 22:53:40
【问题描述】:

我正在编写一些更新表格的代码。根据用户想要做什么,它要么更新大量记录,要么更新较小的记录。描述因素是组 ID。

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:
    create procedure MyProc (@GroupID int = null)
    as
    begin
        update MyTable set ....
        where @GroupID is null or GroupID = @GroupID
    end
    

    【讨论】:

      【解决方案2】:

      您可以使用这个或“或”构造

      ... WHERE GroupID = ISNULL(@GroupdID, GroupID)
      
      
      ... WHERE GroupID = @GroupdID OR @GroupdID IS NULL
      

      【讨论】:

      • 谢谢。这是有效的,但我对语法有点困惑。如果我传入@GroupID 值,SQL 是否会忽略“OR @GroupID IS NULL”位?
      • 是的。如果您传入“42”,“42 IS NULL”的计算结果为 false。只有“GroupID = 42”条件决定发生什么
      猜你喜欢
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多