令人困惑的SQL Server中的where子句

iam*_*ous 0 sql-server case

我希望在我的where子句中有一个简单的条件,在其中一个列上:

@PostTypeid is null那么这里应该是PostTypeid in (4,5),如果 @PostTypeid is not null再where子句应该PostTypeId = @PostTypeId

我试图为此目的使用案例,但我认为我对语法感到困惑.这是我到目前为止提出的:

 (PostTypeid = case(@PostTypeId) when null then in (4,18) else @PostTypeId end)
Run Code Online (Sandbox Code Playgroud)

错误是当我使用,我不认为这是一个有效的语法.这样做的正确方法是什么?谢谢.我试着把括号转移到其他几个地方但是徒劳无功.

谢谢

Mat*_*son 8

就像是:

WHERE
    (@PostTypeID IS NULL AND PostTypeId IN (4, 5)) OR
    (@PostTypeId IS NOT NULL AND PostTypeID = @PostTypeID)
Run Code Online (Sandbox Code Playgroud)

也许?