sql:除非另外還指定了 TOP 或 FOR XML,否則,ORDER BY 子句在視圖、內聯函數、派生表、子查詢


執行sql語句:

select * from (

select * from tab where ID>20 order by userID desc

) as a order by date desc


邏輯上看着挺對 但是報錯:

除非另外還指定了 TOP 或 FOR XML,否則,ORDER BY 子句在視圖、內聯函數、派生表、子查詢和公用表表達式中無效。


只要我們在嵌套子查詢視圖里面加入: top 100 percent 即可

select * from (

select top 100 percent * from tab where ID>20 order by userID desc

) as a order by date desc



默認情況下,如果在子查詢,函數,視圖中嘗試去使用ORDER BY,

CREATE VIEW dbo.VSortedOrders
AS

SELECT orderid, customerid
FROM dbo.Orders
ORDER BY orderid
GO

 

那么可能會遇到下面的錯誤

消息 1033,級別 15,狀態 1,第 4 行

除非另外還指定了 TOPFOR XML,否則,ORDER BY 子句在視圖、內聯函數、派生表、子查詢和公用表表達式中無效。
原因就是針對一個表的SELECT其實並不是返回一個表,而是一個游標。
 
如果一定要用怎么辦呢?答案就是配合TOP 100 PERCENT
SELECT     TOP (100) PERCENT orderid, customerid
FROM         dbo.Orders
ORDER BY orderid, customerid DESC


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM