В общем, способ выполнения пакетного удаления / обновления / вставки заключается в использовании цикла WHILE
.Обычно я придерживаюсь следующей схемы:
WHILE 1=1
BEGIN
INSERT INTO dbo.MyTable
(field1, field2, field3...)
SELECT TOP 100000 (field1, field2, field3...)
FROM dbo.MySourceTableorQuery as S
WHERE NOT EXISTS (
SELECT * FROM dbo.SourceTableorQuery as S
WHERE s.PrimaryKey = MyTable.PrimaryKey)
IF @@ROWCOUNT<100000 BREAK;
END
Что касается того, «нужно ли вам», то невозможно ответить без большого количества другой информации.Что это за запрос, какова структура таблицы, сколько времени требуется для ее выполнения в настоящее время, как вы занимаетесь дисковым пространством (вы действительно увеличите размер базы данных tempdb, если это будет одна транзакция), насколько широкой будет таблицавставляете в и т.д?