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 に答える