3

「OR」比較是否像vb一樣工作? 我的意思是,如果他檢查每個或者如果第一個是假的在SQL Server短路中是「OR」嗎?

DECLARE @var1 bit; 
SET @var1=1 
DECLARE @var2 bit; 
SET @var2=1 

(@var1=1 or @var2=1) 
AND ... 

所以,@var等於1,我們不需要檢查VAR2,但並SQL Server將做檢查?

其對查詢的優化(和服務器的內存)

坦克你

+2

http://dba.stackexchange.com/questions/5333/邏輯運算符或條件和條件順序在哪裏 – 2012-04-19 22:26:03

+2

VB的'或'實際上是**不**短路和*將*評估兩個條件。與VB中的'OrElse'比較。就語義而言,短路(或不)*真正重要*的唯一時間是在條件中允許包括例外在內的副作用,這是另一個問題:「SQL Server是否允許副作用條件句?」 – 2012-04-19 22:28:31

+0

@pst:雖然OP想要短路的原因是因爲性能,這是一個有效的非副作用相關原因:) – mellamokb 2012-04-19 22:32:04

回答

0

Microsoft Connect

感謝您的反饋。我們現在在SQL Server中支持的邏輯運算符是ANSI SQL標準中指定的邏輯運算符,幾乎每個數據庫系統都支持這些運算符。我們不打算擴展它以支持更多非常規邏輯運營商。如果你要有條件地計算表達式,然後使用CASE表達式,而不是在SQL Server中,如:

那裏情況下 時則(選擇1哪裏) 時則(選擇2個位置) ... 結束= 1

CASE表達式保證WHEN/THEN子句按順序進行評估。

2

大多數情況下,SQL Server確實使用AND和OR語句的短路,但有時操作不會按照您期望的順序發生。這是很容易通過以下測試:

SELECT '"Divide By Zero" error' AS [test] WHERE (1/0 = 1) 

SELECT 'NO "Divide By Zero" error' AS [test] WHERE (1 = 1) OR (1/0 = 1) 

你可以在這裏找到一個更深入的分析,由贊布羅塔薩託利:http://www.sqlservercentral.com/articles/T-SQL/71950/