WHERE语句中的CASE语句

时间:2010-05-21 07:26:48

标签: sql sql-server

问候, 我想将CASE声明包含在我的where声明中,如下所示:

SELECT a1.ROWGUID FROM Table1 a1
INNER JOIN Table2 a2 on a1.ROWGUID=a2.Table1ROWGUID
WHERE a1.Title='title' 
AND (CASE WHEN @variable is not null THEN a1.ROWGUID in (SELECT * FROM #TempTable))

但是,这个'CASE'语句在'WHERE'语句中不起作用。 我该怎么做呢?

4 个答案:

答案 0 :(得分:2)

您缺少END,可能还缺少ELSE:

(CASE WHEN @variable is not null THEN a1.ROWGUID ELSE ... END)

答案 1 :(得分:2)

你需要做这样的事情:

WHERE   a1.Title = 'title
AND     (@variable IS NULL
OR      a1.ROWGUID IN (SELECT * FROM #TempTable))

我猜是因为你的案例陈述不完整。

答案 2 :(得分:1)

CASE语句用于返回变量,而不是评估谓词。

因此你可以做到

WHERE CASE WHEN @test1 = 'valuea' THEN 1 ELSE 2 END = MyTestColumn

根据某个变量(或其他列)比较1或2与您的列,但不是您尝试过的方式。

David M的答案是正确的做法,你需要做的事情。

答案 3 :(得分:1)

另一种选择。

SELECT a1.ROWGUID FROM Table1 a1
INNER JOIN Table2 a2 on a1.ROWGUID=a2.Table1ROWGUID
INNER JOIN #TempTable ON  (@variable is null) OR #TempTable.ROWGUID = a1.ROWGUID
WHERE a1.Title='title' 

如果这是针对大量行的,您可能需要注意所有这些替代方案的计划缓存问题,并将其划分为2个替代语句。