SQL Server 2005 起 TOP 支援變數與百分比,效能優於 SET ROWCOUNT,建議全面取代。
-- 建立測試表與 1002 筆資料
IF OBJECT_ID('Demo_Top') IS NOT NULL DROP TABLE Demo_Top; GO
CREATE TABLE Demo_Top (PID int IDENTITY(1,1) PRIMARY KEY, PName nvarchar(100), AddTime datetime, PGuid nvarchar(40)); GO
DECLARE @d datetime = GETDATE(), @i int = 1;
WHILE @i <= 1002 BEGIN
INSERT Demo_Top SELECT CAST(DATEPART(ms,GETDATE()) AS nvarchar(3)) + REPLICATE('A',DATEPART(ss,GETDATE())), GETDATE(), NEWID();
SET @i += 1; END; GO
-- TOP 搭配變數與百分比
DECLARE @percentage float = 1; -- 1%
SELECT TOP (@percentage) PERCENT PName FROM Demo_Top ORDER BY PName; -- 回傳 11 列
SELECT PName, AddTime, PGuid FROM Demo_Top TABLESAMPLE SYSTEM (10 PERCENT);
-- 依資料頁抽樣,非精確列數百分比,適合統計估算
將大量 DELETE/UPDATE 拆分為小批次,優點:
WHILE (SELECT COUNT(1) FROM Demo_Top) > 0
BEGIN
DELETE TOP (202) FROM Demo_Top; -- 每批 202 列
END
/* 輸出:
(202 row(s) affected)
(202 row(s) affected)
(202 row(s) affected)
(202 row(s) affected)
(194 row(s) affected)
*/
TOP同樣支援UPDATE與SELECT,UPDATE TOP (N)在大量資料修正時極為實用。