2016-04-30 94 views
-1

檢查我見過人們通常設置存儲過程的參數爲= NULL,然後請不要在這樣的事情:短路和NULL在SQL Server

where (MinLength IS NULL OR MinLength = 1) 

這是如何工作的?它是否短路?據我所知,在SQL Server中不能保證OR/AND等會發生短路。

+0

爲什麼你的問題提到參數,但你的示例代碼不使用任何?你有意要問這個嗎? http://stackoverflow.com/questions/36230244/sql-server-how-does-this-sql-statement-work/36234886#36234886 –

回答

0

SQL Server不保證短路,這是正確的。但是,在SQL中,將空值與任何值進行比較(包括其他空值,除非ansi_nulls關閉)將簡單地返回false,所以此where子句沒有問題。 這相當於

WHERE ISNULL(MinLength, 0) = 1 

,並

WHERE COALESCE(MinLength, 0) = 1 

這樣的寫作中的要點是允許SQL Server使用的是在使用MINLENGTH列中存在可能的索引(因爲當你在使用功能列sql server不能使用這些列上的索引)。