0

在 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 in

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
4

1 回答 1

1

当 Sql Server 编译查询时,它不会编译标量值函数。所以你永远不知道哪个结果会来自表值函数。此外,与内联查询或表值函数相比,标量值函数的性能相对较差。因为在 UNION 的情况下ORDER BY在 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
于 2012-06-30T05:21:52.467 回答