-1
檢查我見過人們通常設置存儲過程的參數爲= NULL
,然後請不要在這樣的事情:短路和NULL在SQL Server
where (MinLength IS NULL OR MinLength = 1)
這是如何工作的?它是否短路?據我所知,在SQL Server中不能保證OR/AND等會發生短路。
檢查我見過人們通常設置存儲過程的參數爲= NULL
,然後請不要在這樣的事情:短路和NULL在SQL Server
where (MinLength IS NULL OR MinLength = 1)
這是如何工作的?它是否短路?據我所知,在SQL Server中不能保證OR/AND等會發生短路。
SQL Server不保證短路,這是正確的。但是,在SQL中,將空值與任何值進行比較(包括其他空值,除非ansi_nulls關閉)將簡單地返回false,所以此where子句沒有問題。 這相當於
WHERE ISNULL(MinLength, 0) = 1
,並
WHERE COALESCE(MinLength, 0) = 1
這樣的寫作中的要點是允許SQL Server使用的是在使用MINLENGTH列中存在可能的索引(因爲當你在使用功能列sql server不能使用這些列上的索引)。
爲什麼你的問題提到參數,但你的示例代碼不使用任何?你有意要問這個嗎? http://stackoverflow.com/questions/36230244/sql-server-how-does-this-sql-statement-work/36234886#36234886 –