table1&中select select = var = column1之间的差异从table1中选择top 1 column1

时间:2012-06-30 05:15:29

标签: sql-server-2005

在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 by
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 个答案:

答案 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