sql:除非另外還指定了 TOP 或 FOR XML,否則,ORDER BY 子句在檢視、行內函數、派生表、子查詢
阿新 • • 發佈:2020-10-07
執行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 (
selecttop 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 行
除非另外還指定了 TOP 或 FOR XML,否則,ORDER BY 子句在檢視、行內函數、派生表、子查詢和公用表表達式中無效。
原因就是針對一個表的SELECT其實並不是返回一個表,而是一個遊標。
如果一定要用怎麼辦呢?答案就是配合TOP 100 PERCENT
SELECT TOP (100) PERCENT orderid, customerid FROM dbo.Orders ORDER BY orderid, customerid DESC
轉載自:https://www.cnblogs.com/zhangqs008/p/3655631.html