T-SQL 如何批量修改/转移大数据量数据.

-- 定义循环变量
DECLARE @ROWS INT ,
    @ROWS_Limit INT ,
    @ROWS_BATCH INT ,
    @ROWS_COUNT INT ;

-- 设置循环变量参数
SELECT  @ROWS = 0 ,
        @ROWS_Limit = 9517792 ,
        @ROWS_BATCH = 1000 ,
        @ROWS_COUNT = @ROWS_BATCH ;
        
-- 创建临时表变量,记录操作数数据全部主键值       
IF OBJECT_ID('tempdb..#temp001') IS NOT NULL 
    BEGIN
        DROP TABLE #temp001
    END

 -- 创建临时表变量,记录每批次操作记录主键值
IF OBJECT_ID('tempdb..#temp002') IS NOT NULL 
    BEGIN
        DROP TABLE #temp002
    END
		
CREATE TABLE #temp001
(
      TransactionNumber INT PRIMARY KEY ,
     
) ;
    
CREATE TABLE #temp002
(
      TransactionNumber INT PRIMARY KEY ,
) ; 

-- 按条件导入需要操作数据的主键值 
          
INSERT  INTO ##temp001
        SELECT  TransactionNumber
        FROM    TABLE01      

WHILE @ROWS_COUNT = @ROWS_BATCH
    AND @ROWS < @ROWS_Limit 
    BEGIN;
    
       -- 迁移数据
        INSERT INTO @TABLE01 A
        OUTPUT INSERTED.TransactionNumber INTO #temp002
        SELECT TOP (@row_batch) FROM @TABLE02
        INNER JOIN #temp001 C ON A.TransactionNumber = C.TransactionNumber
		WHERE InDate BETWEEN @FromDate AND @EndDate
		
	-- 删除每批次迁移完成数据
		DELETE FROM #temp001 A WHERE TransactionNumber EXISTS
		(SELECT TOP 1 1 FROM #temp002 B WHERE A.TransactionNumber = B.TransactionNumber )
		
        SELECT  @row_count = @@ROWCOUNT ,
                @ROWS = @ROWS + @row_count ;
         -- 截断临时表       
        TRUNCATE TABLE #temp002
    
        WAITFOR DELAY '00:00:10' ;   
    END ;


在处理大数据量数据时,可以按照目前的方式批量处理数据

  

转载于:https://www.cnblogs.com/darjuan/archive/2012/07/03/2575182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值