У меня очень большой набор данных о 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