视图中怎么不能使用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 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

解决方案 »

  1.   

    视图不能用order by  要加的话,前面要加个 top 100 percent可以在查视图的时候再指定排序
    select * from v_kq2 Order by 序号 ASC 
      

  2.   

    有没有可以解决的方法,因为我一定要把Order By语句放在视图中,不需要
    select * from v_kq2 Order by 序号 ASC 
      

  3.   

    是的,谢谢除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
      

  4.   


    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 
    得到的结果集它也没有按顺序进行排列的,请问是怎么回事?
      

  5.   

    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 
      

  6.   

    。。难道楼主是想在查询的时候,不加ORDER BY ,查询出来的结果是自动排序的吗??
    我觉得 那最好写存储过程吧。查询的时候直接调用。 不知道是否可行?
      

  7.   


    楼主,你最好在查询时再排序就好,
    不要在建立视图时排序,2000可以,2005就算TOP 100 PERCENT可能都不行
      

  8.   

    创建排序视图的企图本身就是错误的,因为视图表示一个表,而表是不会对行排序的。众所周知,在SQL Server 2000中追求排序视图的开发人员会利用貌似系统漏洞的一个技巧。利用这个漏洞可以创建一个非常可笑的视图,在该视图中,指定TOP 100 PERCENT以及一个ORDER BY子句,就像这样:ALTER VIEW dbo.VcustsWithOrdersASSELECT TOP (100) PERCENTCountry, CustomerID, CompanyName, ContactName, ContactTitle,Address, City, Region, PostalCode, Phone, FaxFROM Customers AS CWHERE EXISTS(SELECT * FROM dbo.Orders AS O   WHERE O.CustomerID = C.CustomerID)ORDER BY Country;GO