2017-03-28 194 views
1

假設我們有一個名爲'neighbors'的表包含變量'name',並選擇name並使用CASE語句爲第二個變量'age'賦值。一個可用於在SQL CASE語句的語法有兩種不同的形式:在SQL查詢中執行CASE語句

1)簡單的情況表達:

CASE name 
     WHEN 'George' THEN 36 
     WHEN 'Alfred' THEN 40 
     ELSE null 
    END as age 

2)CASE搜索表達式:

CASE 
     WHEN name = 'George' THEN 36 
     WHEN name = 'Alfred' THEN 40 
     ELSE null  
    END as age 

的兩個語句是做同樣的事情。我的問題是,這些語句如何在內存中處理?他們處理的是相同的,還是可能比另一個更有效率?

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql

+1

無論CASE表達式多個條件的第二種方法是有效的T-SQL –

+0

我根據@JohnHC糾正編輯的語法。問題的立場。 –

回答

1

正確的語法是要麼

CASE name 
    WHEN 'George' THEN 36 
    WHEN 'Alfred' THEN 40 
    ELSE null 
END as age 

CASE 
    WHEN name = 'George' THEN 36 
    WHEN name = 'Alfred' THEN 40 
    ELSE null 
END as age 

後者的好處是,它允許多個列進行評估:

CASE 
    WHEN name = 'George' and OtherColumn = 'Stuff' THEN 36 
    WHEN 'Alfred' THEN 40 
    ELSE null 
END as age 
+0

我編輯了我的原始文章,以使用您提供的正確語法。但是,我的問題依然存在。 –

+0

@silent_spec在這種簡單的情況下,性能明智,沒有任何區別。對於更復雜的場景,請閱讀[此處](https://sqlperformance.com/2014/06/t-sql-queries/dirty-secrets-of-the-case-expression) – JohnHC

+0

搜索到的案例表達式是否讀取了「name '兩次進入內存,而簡單的大小寫表達式只讀取一次?如果'名稱'很大,取決於將列讀入內存的方式/方式,可能會有性能差異。這就是我想要弄清的。 –

0

不知道關於內存中表示或性能,但你可以評估像

case 
    when condition1 and (condition2 or condition3) then blah 
    else blah blah 
end