本文介紹 SQL Server 2005 Beta 2 中 Transact-SQL 的幾項重要增強功能,著重於查詢表達能力、遞迴查詢、新關聯運算子以及聲明式參考完整性(DRI)的改進。這些功能能有效提升開發效率與查詢效能。
SQL Server 2005 引入四個新的排序函數:ROW_NUMBER、RANK、DENSE_RANK、NTILE。它們都遵循相同的語法模式:
排序函數() OVER (
[PARTITION BY 分區欄位]
ORDER BY 排序欄位
)
這些函數僅能在 SELECT 或 ORDER BY 子句中使用,適用於分頁、計分、直方圖等場景。
CREATE TABLE SpeakerStats (
speaker VARCHAR(10) NOT NULL PRIMARY KEY,
track VARCHAR(10) NOT NULL,
score INT NOT NULL,
pctfilledevals INT NOT NULL,
numsessions INT NOT NULL
);
INSERT INTO SpeakerStats VALUES
('Dan', 'Sys', 3, 22, 4),
('Ron', 'Dev', 9, 30, 3),
('Kathy', 'Sys', 8, 27, 2),
('Suzanne', 'DB', 9, 30, 3),
('Joe', 'Dev', 6, 20, 2),
('Robert', 'Dev', 6, 28, 2),
('Mike', 'DB', 8, 20, 3),
('Michele', 'Sys', 8, 31, 4),
('Jessica', 'Dev', 9, 19, 1),
('Brian', 'Sys', 7, 22, 3),
('Kevin', 'DB', 7, 25, 4);
ROW_NUMBER():為每個分區內的行分配連續整數。RANK():相同值給予相同排名,下一個排名跳過間隔。DENSE_RANK():相同值相同排名,下一個排名不跳過。NTILE(n):將分區內行盡量平均分配到 n 個桶中。WITH 子句定義的 CTE 可用於遞迴查詢,例如組織架構、物料清單(BOM)等層級資料。語法:
WITH cte_name (欄位列表) AS (
-- 錨點查詢
SELECT ... FROM ...
UNION ALL
-- 遞迴查詢
SELECT ... FROM cte_name JOIN ... ON ...
)
SELECT * FROM cte_name;
將行資料旋轉為列,支援彙總函數,語法簡潔:
SELECT * FROM (
SELECT category, amount, year FROM Sales
) AS src
PIVOT (
SUM(amount) FOR year IN ([2003], [2004], [2005])
) AS pvt;
CROSS APPLY 與 OUTER APPLY 允許將表值函數應用於外部查詢的每一行,實現類似聯結但更靈活的行級運算。
ON DELETE/UPDATE SET NULL/DEFAULT 參考動作。CREATE TABLE 或 ALTER TABLE 中定義多欄位外鍵。SQL Server 2005 的 T-SQL 增強大幅提升了關聯式查詢的表達能力,尤其排序函數、CTE 遞迴、PIVOT/APPLY 運算子為複雜報表與階層資料處理提供了強有力的工具。建議開發人員儘早熟悉並應用於專案中。