2012-06-30 71 views
0

選擇頂部1列1在SQL Server之間select @var=column1 from table1 & select top 1 column1 from table1差異從表1

我有與在SELECT語句中列的視圖問題2005

差異在這個模型中

select column0, fn(column0) as col from table2 

fnselect @var=column1 from table1 where [email protected]

我這個

select 
    column0, 
    (select top 1 column1 from table1 where table1.id = table2.column0) as col 
from table2 

取代它,但結果不一樣以前

,並在

select top 1 column1 from table1 where table1.id = table2.column0 

也沒有效果

我需要知道爲什麼使用順序我可以更換嗎

select top 1 column1 from table1 where table1.id = table2.column0 

具有相同的結果

select @var=column1 from table1 where table1.column3 = @inputid 

回答

1

當SQL Server編譯查詢,它不會編譯標值函數。所以你永遠無法知道哪個結果來自表值函數。此外,與內聯查詢或表值函數相比,標量值函數會導致相對較差的性能。 由於ORDER BY在UNION的情況下在TOP之後執行。所以我懷疑這個案子正在得到應用。你可以粘貼查詢執行計劃

查詢的執行順序

1. FROM, JOIN, APPLY and ON 
2. WHERE 
3. GROUP BY 
4. HAVING 
5. SELECT 
6. ORDER BY 
7. TOP 
8. FOR XML 

當使用UNION,執行順序稍有變化

1. FROM, JOIN, APPLY and ON 
2. WHERE 
3. GROUP BY 
4. HAVING 
5. TOP 
5. UNION and SELECT 
6. ORDER BY 
8. FOR XML