j.s*_*ell 5 sql t-sql sql-server sql-server-2005 short-circuiting
在SQL(SQL Server 2005)中是否有与VB的AndAlso/ OrElse和C#的&&/相同的功能||.我正在运行类似于以下的选择查询:
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)
Run Code Online (Sandbox Code Playgroud)
例如,如果将"@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*/
Run Code Online (Sandbox Code Playgroud)
根据我的经验,这通常比让DB引擎排除它更慢.
TerrorAustralis的答案通常是非可空列的最佳选择