视图中怎么不能使用Order By语句

hz03zhuhaowen 2009-11-30 07:03:33
视图中怎么不能使用Order By语句?
Alter view v_kq2
as
Select Fid '序号',GH '工号',CJ '车间',GX '工序',TB '台板',NameID '车间员工号',FName '姓名',XS '技术比例系数',Note '备注',FDate '日期',FUser '制单人'
From cl_ygjc
Where CJ In('2','5')
Order by 序号 ASC

会报错:
消息 1033,级别 15,状态 1,过程 v_kq2,第 6 行
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
...全文
1391 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tankhero 2011-08-09
  • 打赏
  • 举报
回复
opq
netcup 2009-12-01
  • 打赏
  • 举报
回复
你可以在引用视图的时候顺便排序下,不要在创建时排序
sych888 2009-12-01
  • 打赏
  • 举报
回复
学习
yangdingyu8686 2009-11-30
  • 打赏
  • 举报
回复
创建排序视图的企图本身就是错误的,因为视图表示一个表,而表是不会对行排序的。众所周知,在SQL Server 2000中追求排序视图的开发人员会利用貌似系统漏洞的一个技巧。

利用这个漏洞可以创建一个非常可笑的视图,在该视图中,指定TOP 100 PERCENT以及一个ORDER BY子句,就像这样:

ALTER VIEW dbo.VcustsWithOrders

AS

SELECT TOP (100) PERCENT

Country, CustomerID, CompanyName, ContactName, ContactTitle,

Address, City, Region, PostalCode, Phone, Fax

FROM Customers AS C

WHERE EXISTS

(SELECT * FROM dbo.Orders AS O

WHERE O.CustomerID = C.CustomerID)

ORDER BY Country;

GO

SQL77 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 hz03zhuhaowen 的回复:]
视图中怎么不能使用Order By语句?
Alter view v_kq2
as
Select Fid '序号',GH '工号',CJ '车间',GX '工序',TB '台板',NameID '车间员工号',FName '姓名',XS '技术比例系数',Note '备注',FDate '日期',FUser '制单人'
From cl_ygjc
Where CJ In('2','5')
Order by 序号 ASC

会报错:
消息 1033,级别 15,状态 1,过程 v_kq2,第 6 行
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
[/Quote]

楼主,你最好在查询时再排序就好,
不要在建立视图时排序,

2000可以,2005就算TOP 100 PERCENT可能都不行
nightgoblin 2009-11-30
  • 打赏
  • 举报
回复
。。难道楼主是想在查询的时候,不加ORDER BY ,查询出来的结果是自动排序的吗??
我觉得 那最好写存储过程吧。查询的时候直接调用。 不知道是否可行?
dawugui 2009-11-30
  • 打赏
  • 举报
回复
Alter view v_kq2 
as
Select Fid '序号',GH '工号',CJ '车间',GX '工序',TB '台板',NameID '车间员工号',FName '姓名',XS '技术比例系数',Note '备注',FDate '日期',FUser '制单人'
From cl_ygjc
Where CJ In('2','5')

select * from  v_kq2 order by Order by 序号 ASC 
hz03zhuhaowen 2009-11-30
  • 打赏
  • 举报
回复

Alter view v_kq2
as
Select top 100 percent
Fid '序号',GH '工号',CJ '车间',GX '工序',TB '台板',NameID '车间员工号',FName '姓名',XS '技术比例系数',Note '备注',FDate '日期',FUser '制单人'
From cl_ygjc
Where CJ In('2','5')
Order by Fid ASC

我这样是没有报错了,
但是给视图加上Select top 100 percent 后,再
Select top 100 percent
得到的结果集它也没有按顺序进行排列的,请问是怎么回事?
feixianxxx 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hz03zhuhaowen 的回复:]
有没有可以解决的方法,因为我一定要把Order By语句放在视图中,不需要
select * from v_kq2 Order by 序号 ASC
[/Quote]
...有意义么在视图里面排序?
视图 最后还是一个表 是个集合 没有逻辑性的.....

hz03zhuhaowen 2009-11-30
  • 打赏
  • 举报
回复
是的,谢谢

除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
hz03zhuhaowen 2009-11-30
  • 打赏
  • 举报
回复
有没有可以解决的方法,因为我一定要把Order By语句放在视图中,不需要
select * from v_kq2 Order by 序号 ASC
liangCK 2009-11-30
  • 打赏
  • 举报
回复
提示的信息不是说得很清楚了吗?
sgtzzc 2009-11-30
  • 打赏
  • 举报
回复
视图不能用order by 要加的话,前面要加个 top 100 percent

可以在查视图的时候再指定排序
select * from v_kq2 Order by 序号 ASC

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧