2013-07-05 130 views
1

我所試圖做的是這樣的:分配變量

DECLARE @Test NVARCHAR(200) 
SELECT et.ExampleField, (SELECT CASE (@Test = (SELECT 'Test')) WHEN @Test IS NOT NULL THEN @Test 
ELSE 
'' 
END) FROM ExampleTable et 

爲了提高可讀性我已經簡化了一點,但基本上(SELECT 'Test')位可以是任何SQL語句SELECT拉返回一個值(或NULL)供我測試。

可以這樣做嗎?我試圖這樣做的原因是我希望通過消除對嵌套選擇的需求(在此示例中爲(SELECT 'Test'))而不必運行多次,即像這樣的工作:

DECLARE @Test NVARCHAR(200) 
SELECT et.ExampleField, (SELECT CASE WHEN (SELECT 'Test') IS NOT NULL THEN (SELECT 'Test') 
ELSE 
'' 
END) FROM ExampleTable et 

回答

2

通常這些事情都是從sql-server進行優化,所以子查詢不會執行多次。 但是,您可以使用ISNULLCOALESCE

SELECT et.ExampleField, 
     COALESCE((SELECT ...),'') As Col 
FROM ExampleTable et 

即使是簡單的例子:http://sqlfiddle.com/#!2/d41d8/15850

+0

所以看起來我可能不需要擔心多次執行的查詢。然而,當你說這些事情是'正常'優化,你是否說有這種情況發生?如果是這樣,你能舉出任何例子嗎?還是會這麼複雜,我不太可能遇到這種情況?謝謝。 – Interminable

0

記住,T-SQL是說明性語言。所以它會考慮優化。它不會多次執行select語句。