将数据批量插入表中

时间:2019-07-02 18:33:01

标签: sql-server

我有一个非常大的数据集,大约有4000万个数据项。我正在尝试将此加载​​到新表。由于数据集确实很大,因此我试图批量加载它们,因此日志事务将不满。我正在使用以下查询,但仍然存在日志事务已满的问题。

是否有一种方法可以在每批处理之后提交转换,以免将其保存到日志中并用于下一个批处理?

请让我知道我是否有解决此问题的方法。

SSIS目前不适合我。

DECLARE @I BIGINT;    
DECLARE @icnt int;   
DECLARE @n INT, @flag INT;   

SELECT @icnt = (SELECT COUNT(*) FROM table1) A  

PRINT @ICNT  
BEGIN  
    SELECT @I = 0  

    WHILE @I <=@icnt  
    BEGIN  
        SELECT @n = 0  
        SELECT @flag = 1  

        BEGIN TRANSACTION  
        WHILE @flag != 0  
        BEGIN  
            ;WITH A AS   
            (
                SELECT
                    a.*,
                    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS batchnum 
                FROM 
                    table1       
            )   
            INSERT INTO table2 (*)  
                SELECT *   
                FROM A
                WHERE batchnum >= @I AND batchnum <@I + 10000000  

            SELECT @I = @I + 10000000  
            SELECT @n = @n + 10000000

            SELECT @flag = CASE WHEN @n >= 50000000 THEN 0   
                                WHEN @I >= @icnt THEN 0 ELSE 1 END  
            PRINT @I  
        END   

        COMMIT TRANSACTION  
    END   
END

0 个答案:

没有答案