首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 檢視表使用 ORDER BY 技巧:TOP 100 PERCENT 繞過 ANSI 標準限制

     編輯:MySQL 資料庫相關知識

依 ANSI SQL-92 標準,檢視表定義中不允許 ORDER BY,因為檢視表本質是「未排序的關聯集合」。但實務上常需預設排序,SQL Server 提供 TOP 100 PERCENT 繞過限制。

標準限制原因

關聯理論中關聯無順序;允許 View 內排序會破壞關聯代數特性(如 View 疊加時順序不確定)。SQL Server 為遵循標準而禁止。

繞過技巧:TOP 100 PERCENT + ORDER BY

USE pubs
GO
CREATE VIEW AuthorsByName
AS
SELECT TOP 100 PERCENT *
FROM authors
ORDER BY au_lname, au_fname
GO
  • TOP 100 PERCENT 表示「全部列」。
  • SQL Server 僅在 TOP 存在時允許 View 內 ORDER BY。
  • TOP 為 T-SQL 擴展,非 ANSI 標準。

注意事項與最佳實踐

  1. 外層查詢若再加 ORDER BY,以外層為準,內層排序可能被最佳化器忽略。
  2. 不保證輸出順序:最佳化器可能為了效能移除不必要的排序。若業務強依賴順序,務必在最終 SELECT 加上 ORDER BY。
  3. 大型 View 使用此技巧會增加不必要的排序開銷,建議僅在小型查閱型 View 使用。

總結

檢視表本質無序;TOP 100 PERCENT ... ORDER BY 是 T-SQL 特有繞過手段,但不應依賴它保證最終輸出順序。正確做法:View 定義不含 ORDER BY,應用層或最終查詢明確指定排序。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved