SQL Server中带有条件Where子句的存储过程

Kei*_*ell 1 sql-server stored-procedures

我正在创建一个SQL Server存储过程。这SELECT是我正在构建的简单查询。参数之一是寻找标志参数。如果该参数留空,则SELECT默认应为完全不包含该WHERE子句。

CREATE PROCEDURE sprocA
    @flagInd int
AS 
BEGIN
    SELECT intID, strQuestion, strAnswer, intCategory, intOrder
    FROM tblA 
    -- Right here is where I am looking for the logic of the @flagInd to be evaluated.....
    -- if @flagInd = 1 then 'WHERE flgInd=1' 
    -- else if @flagInd=0 then 'WHERE flgInd=0'
    -- else if @flagInd IS NULL then ''
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的查询,也是我的一个简单想法,不确定是否可以在不嵌套和重写整个SELECT语句作为IF语句的一部分的情况下完成此操作。

Lam*_*mak 5

可以这样完成:

SELECT intID, strQuestion, strAnswer, intCategory, intOrder
FROM tblA 
WHERE flgInd = @flgInd OR @flgInd IS NULL;
Run Code Online (Sandbox Code Playgroud)

您还可以使用一个CASE表达式:

SELECT intID, strQuestion, strAnswer, intCategory, intOrder
FROM tblA 
WHERE CASE 
          WHEN flgInd = @flgInd THEN 1
          WHEN @flgInd IS NULL THEN 1 
          ELSE 0
       END = 1;
Run Code Online (Sandbox Code Playgroud)

  • @JuanCarlosOropeza,因为在许多情况下,第一个选项的执行计划可能不如使用CASE表达式那样最佳。 (2认同)