依 ANSI SQL-92 標準,檢視表定義中不允許 ORDER BY,因為檢視表本質是「未排序的關聯集合」。但實務上常需預設排序,SQL Server 提供 TOP 100 PERCENT 繞過限制。
關聯理論中關聯無順序;允許 View 內排序會破壞關聯代數特性(如 View 疊加時順序不確定)。SQL Server 為遵循標準而禁止。
USE pubs
GO
CREATE VIEW AuthorsByName
AS
SELECT TOP 100 PERCENT *
FROM authors
ORDER BY au_lname, au_fname
GO
TOP 100 PERCENT 表示「全部列」。TOP 存在時允許 View 內 ORDER BY。TOP 為 T-SQL 擴展,非 ANSI 標準。檢視表本質無序;TOP 100 PERCENT ... ORDER BY 是 T-SQL 特有繞過手段,但不應依賴它保證最終輸出順序。正確做法:View 定義不含 ORDER BY,應用層或最終查詢明確指定排序。