我看到人们经常将存储过程参数设置为= NULL
,然后在WHERE中执行类似的操作:
where (MinLength IS NULL OR MinLength = 1)
这是如何工作的?它是短路的吗?据我所知,在SQL Server中无法保证OR / AND等会发生短路。
答案 0 :(得分:0)
Sql server不保证短路,这是正确的。但是,在sql中,将空值与任何值(包括其他空值,除非ansi_nulls关闭)进行比较将只返回false,因此这个where子句没有问题。 它相当于
WHERE ISNULL(MinLength, 0) = 1
和
WHERE COALESCE(MinLength, 0) = 1
这样的写入点是允许sql server使用MinLength列上可能存在的索引(因为当你在列上使用函数时,sql server不能使用这些列上的索引)。