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

时间:2011-01-12 11:15:30

标签: sql-server case

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

@PostTypeid is null然后 应为PostTypeid in (4,5)时,如果 @PostTypeid is not null然后where子句应为PostTypeId = @PostTypeId

我正在尝试将 case 用于此目的,但我认为我对语法感到困惑。这是我到目前为止所提出的:

 (PostTypeid = case(@PostTypeId) when null then in (4,18) else @PostTypeId end)

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

由于

2 个答案:

答案 0 :(得分:8)

类似的东西:

WHERE
    (@PostTypeID IS NULL AND PostTypeId IN (4, 5)) OR
    (@PostTypeId IS NOT NULL AND PostTypeID = @PostTypeID)

也许?

答案 1 :(得分:-2)

你不能在一个陈述中使用=和运算符

编辑:

(PostTypeid = case(@PostTypeId)为null,然后 (4,18),否则@PostTypeId结束)

如果@PostTypeId为null,则它将如下所示。

(PostTypeid = in (4,8)) 

这是语法错误。

case(@PostTypeID) when IS NULL then PostyTypeId in (4,18) else PostTypeId = PostTypeId

这种情况应该返回单个结果。