Пакетная вставка данных в таблицу - PullRequest
0 голосов
/ 02 июля 2019

У меня очень большой набор данных о 40000000 элементов данных.Я пытаюсь загрузить это в новую таблицу.Так как набор данных действительно большой, я пытаюсь загрузить их в пакетном режиме, чтобы транзакция журнала не была полной.Я использую запрос ниже, но все еще есть проблема с заполнением транзакции журнала.

Есть ли способ зафиксировать переход после каждой партии, чтобы он не сохранялся в журнале и переходил к следующей партии?

Пожалуйста, дайте мне знать, если есть способ для менярешить эту проблему.

И 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...