【问题标题】:The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expression [duplicate]ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效 [重复]
【发布时间】:2021-01-27 01:02:09
【问题描述】:

我正在尝试在我的视图中添加 order by 子句,但它会引发错误。

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

   ALTER VIEW [dbo].[vw_Test_booking]
   AS
    select NEWID() as UniqueKey, * from (
        SELECT  [startdatetime]           AS StartDateTime,    
               [bookingdatetime]         AS BookingDateTime, 
               [firstname]               AS firstname       
         FROM   [dbo].[vw_Testpatient] 
        WHERE  statusCode in (                       
        '2',    
        '0      
        )       
    ) T
    ORDER BY startdatetime DESC


GO

【问题讨论】:

  • @DaleK,我想对 startdatetime 使用 order by 子句
  • @DaleK,我可以看到,但我正在寻找一种方法来做到这一点。

标签: sql-server tsql


【解决方案1】:

正如它所说 - 您不能在视图定义中包含 ORDER BY 子句。同理,当 SELECT 没有应用 ORDER BY 时,从表中返回的数据的顺序意味着不能保证数据的顺序。

在从视图中选择的查询中应用 ORDER BY

代替

ALTER VIEW [dbo].[vw_Test_booking]  
AS  
 select NEWID() as UniqueKey, * 
 from (
    SELECT  [startdatetime]           AS StartDateTime,    
           [bookingdatetime]         AS BookingDateTime, 
           [firstname]               AS firstname       
    FROM   [dbo].[vw_Testpatient] 
    WHERE  statusCode in (                       
    '2',    
    '0      
 )       
) T
ORDER BY startdatetime DESC

像这样应用它

SELECT *
FROM dbo.vw_Test_booking
ORDER BY StartDateTime  DESC

【讨论】:

  • 我不想创建另一个视图来从select * from... 获取数据有没有办法将它包含在视图本身中。
  • @MVC 你不必创建另一个视图...你在使用视图的地方订购它。
  • @DaleK,我明白你的意思。这里的问题是我需要修改代码,但我不想接触代码。由于这已经是一个工作视图,所以我认为如果有任何方法可以修改视图本身,那就太好了。
  • 这次你不得不改代码了。但是,如果您想避免以后更改代码,请将 select 放在存储过程中。
  • @DaleK,明白了。感谢您的宝贵时间。
猜你喜欢
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多