sql - 相当于SQL中的VB AndAlso?

标签 sql sql-server sql-server-2005 tsql short-circuiting

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/

相关文章:

sql - 将现有表转换为 SQL 图形节点或边缘

tsql - 如何获取多列以在游标循环中使用?

mysql - SQL 连接两个 SELECT 语句 - 相当简单

sql - oracle中字符串比较的问题

sql-server - 如何在SQL Server中显示小数点后两位数

sql - 如何在嵌套过程中找到父存储过程的 ID?

c# - 仅当我重新启动 SQL Server 数据库服务器时,存储过程才起作用

sql - 左连接中的最新记录

sql - 协助编写复杂 SQL 查询的最佳工具?

mysql - 查询 : has_many where all the child fields are nil