日期:2014-05-18  浏览次数:20577 次

ROW_NUMBER() OVER问题
建了一个视图
create view [dbo].[view_leftDoc]
as
SELECT TOP (100) PERCENT *
FROM (SELECT id, Name, Type, code, pages, mark, isvalid, KeyCode, SubKeyCode, need, ROW_NUMBER() OVER (partition BY KeyCode
  ORDER BY id) AS num
FROM dbo.Important_Doc
WHERE isvalid = 1) AS t
WHERE (t .num < 9) AND t .isvalid = 1 order by num
然后在查询分析器中执行select * from view_leftdoc where keycode='20120104555'
在sql server2005中每次执行这句查询语句时,查询出的结果没有按num排序,每次查询出的结果都是随机排序的;
在sql server2008中每次执行这句查询语句时,查询出的结果都是按num从小到大排序;
这是什么原因啊?怎么样才能在2005中也能固定排序
ps:不能在select * from view_leftdoc where keycode='20120104555'中加排序


------解决方案--------------------
你需要排序则
select * from view_leftdoc where keycode='20120104555' ORDER BY NUM

不要依赖视图里的排序,可能同样2005,一些会自动排序一些不会。

------解决方案--------------------
在视图 内联函数 派生表或者子查询
使用order by 子句只用于确定top字句返回的行
不保证在查询这些构造时得到有序的结果
2000只是一个特例应该说是漏洞吧