SQL Server中的短路和NULL检查

时间:2016-04-30 09:24:16

标签: sql-server

我看到人们经常将存储过程参数设置为= NULL,然后在WHERE中执行类似的操作:

where (MinLength IS NULL OR MinLength = 1)

这是如何工作的?它是短路的吗?据我所知,在SQL Server中无法保证OR / AND等会发生短路。

1 个答案:

答案 0 :(得分:0)

Sql server不保证短路,这是正确的。但是,在sql中,将空值与任何值(包括其他空值,除非ansi_nulls关闭)进行比较将只返回false,因此这个where子句没有问题。 它相当于

WHERE ISNULL(MinLength, 0) = 1

WHERE COALESCE(MinLength, 0) = 1

这样的写入点是允许sql server使用MinLength列上可能存在的索引(因为当你在列上使用函数时,sql server不能使用这些列上的索引)。