Блокировка фиксации после обновления / вставки для 10 миллионов обрабатываемых записей - PullRequest
0 голосов
/ 07 декабря 2010

Требования требуют обновления и вставки для 10 миллионов записей в Sql Server 2005. Я создал хранимую процедуру с использованием T-SQL. Нужно ли делать коммит после описанного выше процесса, скажем, 10000 записей, зафиксированных одновременно. Если да, то как мне написать оператор коммита, скажем, каждые 10000 записей. Любые идеи будут оценены.

1 Ответ

3 голосов
/ 07 декабря 2010

В общем, способ выполнения пакетного удаления / обновления / вставки заключается в использовании цикла 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, если это будет одна транзакция), насколько широкой будет таблицавставляете в и т.д?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...