rsocol:
rsocol:[...] deşi uneori ni se pare că ORDER BY-ul cu TOP 100 PERCENT funcţionează în view-uri şi subquery-uri, este de fapt doar o întâmplare.
Câteva clarificări în legătură cu fraza de mai sus:
http://blogs.msdn.com/queryoptteam/archive/2006/03/24/560396.aspx
Răzvan
...
create view v as (select top 100 percent * from t1 order by col1 desc)
...
select * from v
...
Este de inteles faptul ca in urma executiei interogarii select * from v se obtine POATE un set de inregistrari neordonate/nesortate. Si asta intr-adevar pentru ca in aceasta interogare lipseste clauza ORDER BY (select * from v order by ...). De asemenea, din analiza planului de executie se observa clar faptul ca M-SGBD (database engine) igonora clauza ORDER BY din definitia vederii select top 100 percent * from t1 order by col1 desc
in momentul executiei interogarii select * from v
|--Table Scan(OBJECT:([tempdb].[dbo].[t1]))
Dar, daca cream o vedere cu urmatoarea definitie create view v2 as (select col1, col2 from t1 group by col1, col2)
in urma executiei interogarii select * from v2 rezultatul va fi altul: inregistrarile sunt ordonate desi lipseste indexul "cluster".
|--Sort(DISTINCT ORDER BY:([tempdb].[dbo].[t1].[col1] ASC, [tempdb].[dbo].[t1].[col2] ASC))
|--Table Scan(OBJECT:([tempdb].[dbo].[t1]))
Chiar si in acest ultim caz nu este o garantie (teoretic si practic) asupra faptului ca IN FINAL (select * from v2) setul de inregistrari va fi ordonat conform criteriilor din definitia vederii v2 ( create view v2 as ( ... group by col1, col2) ).