SQL 中是否有相当于 VB 的 AndAlso
/OrElse
和 C# 的 &&
/||
(SQL服务器 2005)。我正在运行类似于以下内容的选择查询:
SELECT a,b,c,d
FROM table1
WHERE
(@a IS NULL OR a = @a)
AND (@b IS NULL OR b = @b)
AND (@c IS NULL OR c = @c)
AND (@d IS NULL OR d = @d)
例如,如果“@a”参数作为 NULL 传入,则评估 WHERE 子句的第二部分 (a = @a) 是没有意义的。有没有办法通过使用特殊语法或重写查询来避免这种情况?
谢谢, 詹姆斯。
最佳答案
保证求值顺序的唯一方法是使用CASE
WHERE
CASE
WHEN @a IS NULL THEN 1
WHEN a = @a THEN 1
ELSE 0
END = 1
AND /*repeat*/
根据我的经验,这通常比让数据库引擎对其进行排序要慢。
TerrorAustralis 的答案通常是不可为空列的最佳选择
关于sql - 相当于SQL中的VB AndAlso?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1649237/