除非还指定了TOP,OFFSET或FOR XML,否则ORDER BY子句在视图,内联函数,派生表中无效

时间:2016-10-04 22:59:57

标签: sql views

use library
go

create view V_booksOut3
as
SELECT
(select Book.Book_Title from Book where LB.B_ID=Book.Book_ID) as 'Book_Title',
L.Loaner_FName,
L.Loaner_Lname,
L.Loaner_Phone,
L.Loaner_Email,`enter code here`
LB.bookDueDate
FROM Loaner L
inner join Loaner_Book LB
ON L.Loaner_ID=LB.L_ID
WHERE LB.isActive = 1
ORDER BY L.Loaner_LName;

- 我一直遇到这个错误,但是一旦我删除了最后一行并尝试创建一个视图,它就会消失。 我不想使用top / for xml关键字,但我希望使用此查询创建此视图。

2 个答案:

答案 0 :(得分:0)

除非明确包含ORDER BY,否则SQL表和结果集代表无序集。这也包括子查询。因此,子查询的结果是无序 - 它们必须是。拥有ORDER BY只是没有意义。

有些数据库放宽了这个限制。但是,SQL Server非常explicit about it

  

视图定义中的SELECT子句不能包含以下内容:

     
      
  • ORDER BY子句,除非select中还有一个TOP子句   SELECT语句的列表System_CAPS_ICON_important.jpg重要
  •   
     

ORDER BY子句仅用于确定行   由视图定义中的TOP或OFFSET子句返回。命令   查询视图时,BY子句不保证有序结果,   除非在查询本身中也指定了ORDER BY。

答案 1 :(得分:0)

请从内部查询中删除Order by子句,然后将其放在外面,否则您必须在内部查询中包含Top子句。您一定会找到解决方案的,快乐的SQL兄弟:)

实际上,当您创建视图时,可以在查询中使用它,因此,如果您可以在查询中使用此视图,那么您一定在创建的视图上应用order by,这意味着视图将被创建为原始表,而没有order by,那么您可以应用order创建的数据集视图上的by子句。

希望它会消除混乱。