在sql server 2005中
select @var=column1 from table1
&之间的差异select top 1 column1 from table1
我遇到一个问题,该视图在此模型的select语句中有一列
select column0, fn(column0) as col from table2
fn
返回select @var=column1 from table1 where table1.column3=@inputid
我用这个替换它
select
column0,
(select top 1 column1 from table1 where table1.id = table2.column0) as col
from table2
但结果与之前的
不同并在
中使用order byselect 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
答案 0 :(得分:1)
当Sql Server编译查询时,它不会编译标量值函数。所以你永远不知道哪个结果会来自Table值函数。此外,与内联查询或表值函数相比,标量值函数导致相对较差的性能。 因为在UNION的情况下,在TOP之后执行 ORDER BY 。所以我怀疑这个案子正在应用。可以粘贴查询的执行计划
执行查询的顺序
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