首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2008

SQL Server 2008 TOP 子句新用法:取代 SET ROWCOUNT、分批處理大量資料

     編輯:SQL Server 2008

一、TOP 取代 SET ROWCOUNT

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 列

補充:TABLESAMPLE 快速取樣

SELECT PName, AddTime, PGuid FROM Demo_Top TABLESAMPLE SYSTEM (10 PERCENT);
-- 依資料頁抽樣,非精確列數百分比,適合統計估算

二、TOP 分批修改大量資料 (Chunking)

將大量 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) 在大量資料修正時極為實用。

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