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

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

講的非常清晰就轉載了
轉載來自:http://www.cnblogs.com/zhangqs008/p/3655631.html
發佈了25 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章