SQL Server 子查詢無法使用 ORDER BY?


🎯 這兩天改 Bug 時使用 Sql Server 的子查詢遇到了一些問題,特此記錄一下,之前用 MySQL 比較多,按照 MySQL 的語法其實是沒有問題的。


以下面這張表為例:

執行以下 SQL:

select * from (
	select * from t_book order by number
) ttt

會報出下面的錯誤:

> Msg 1033, Level 15, State 1, Server WIN-IOR47PKR2AD, Procedure , Line 0
除非另外還指定了 TOP、OFFSET 或 FOR XML,否則,ORDER BY 子句在視圖、內聯函數、派生表、子查詢和公用表表達式中無效。
> [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]除非另外還指定了 TOP、OFFSET 或 FOR XML,否則,ORDER BY 子句在視圖、內聯函數、派生表、子查詢和公用表表達式中無效。 (1033)

經過一番折騰,找到解決方案:select 后面加上 top 100 percent

select * from (
	select top 100 percent * from t_book order by number
) ttt

運行結果如下,看似成功運行了,但 order by 並沒有生效!!!

於是乎,又是一番折騰,改動 SQL:

/*
一般來說,如果數據庫不回超過1億條數據,使用99.999999 PERCENT不會使你遺漏數據。需要的話再添倆9
*/
select * from (
	select top 99.999999 percent * from t_book order by number
) ttt

得到正確結果:


參考


最后:提前祝大家假期快樂 🎉🎉🎉


免責聲明!

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



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