在sql中where子句条件的case语句

Dot*_*row 1 sql t-sql sql-server

我有一个这样的存储过程:

ALTER PROCEDURE [dbo].[hr_SearchVacanciesAdmin]
    @SearchText NVARCHAR(50) = NULL,
    @CompanyName NVARCHAR(100) = NULL,
    @DutyStationID INT = NULL,
    @VacancyCategoryIDs VARCHAR(1000) = NULL,
    @Status INT,
    @Language INT = 1

BEGIN

SELECT * from table
where 
  deleted = 0
  and status = @status
  and catname  = &searchtext

..
..
..
END
Run Code Online (Sandbox Code Playgroud)

我想在where where条件中添加case语句,这样如果@status = 4则不检查delete =.我试过跟随但不工作

WHERE 
  1 = CASE 
        WHEN @Status = 4 
        THEN @status

        WHEN dbo.hr_Vacancies.Deleted = 0 
             --Search Criteria
             AND dbo.hr_Vacancies.Status = @Status 
        THEN @Status
      END
Run Code Online (Sandbox Code Playgroud)

RB.*_*RB. 5

您不需要CASE语句来实现此功能.以下会很好:

SELECT * 
from   table
where  (deleted = 0 OR @status=4)
and    status = @status
and    catname = @searchtext
Run Code Online (Sandbox Code Playgroud)

另请注意,您的代码&searchtextwhere子句中引用,但这应该是@searchtext根据此答案(即前缀@没有&).