mssql sqlserver 视图中使用order by 的方法简介


摘要:
今天在视图编写中,在表连接后面加入order by 后,运行视图,提示
“除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。”
下文将讲述一种变相的实现视图中使用order by ,通过此方法可以使视图支持order by 关键字,打破视图中不可使用order by关键字的传说,如下所示:
实验环境:sqlserver 2008 R2


--例:
    create table test(keyId int identity, info varchar(20))
   go
   insert into test(info)values('a'),('b'),('c'),('d')
 go 
  create view vw_test 
  as 
   select * from test order by keyId desc  
  go
  select * from vw_test
 --当运行此视图时,出现以下错误信息
 --- "除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。"
 --此时我们需要使用top关键字 指定视图显示行的方法,使视图支持order by,如下
 ---使用 top 100 percent 返回前百分之百行数据
 alter view vw_test 
 as 
   select top 100 percent * test order by keyId desc  
 go 
   select * from vw_test ---一切运行正常,视图中的数据也是按照指定的排序方式进行排序
go
  
  drop view vw_test 
  truncate table  test 
  drop table test