Массовое удаление и вставка - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать скрипт, который проверяет, существует ли регистр, если он существует, он удаляет его и вставляет новый с обновленными данными. Я создаю сценарий с помощью программы, которая копирует файл с одного NAS на другое, и он довольно простой.

Пока мой код создает скрипт со следующими строками:

IF EXISTS (SELECT TOP 1 iDRegister FROM Documents WHERE iDRegister= 123456) BEGIN
    DELETE FROM Documents WHERE iDRegister= 123456
END
INSERT INTO Documents (iDRegister, idAPP, idDocType, Batch, BatchUploadDate, UploadDate, Route, idNas, Memo, NroMemo, DocID, ClientID, Folio, PolicyNum, CardNum, ProposalNum, RequirementNum, SolicitacionNum, AuditNum, RejectNum, SentMemo, OccurNum, StampDate, CompanyFund, IsMemo)
VALUES (123456, 10, 1, '1', CONVERT(VARCHAR(50), GETDATE(), 120), '20190416', 'Route\image.TIF', 1, '11111', '', '111111111', '', '11111111111111', '', '', '', '', '', '', '', '', '', '', '', 'NO')

Это прекрасно работает, но я должен сделать то же самое для 2,2 миллиона регистров. Можно ли как-нибудь удалить предыдущий регистр, если он существует, а затем использовать массовую вставку?

1 Ответ

1 голос
/ 16 апреля 2019

Можете ли вы вместо этого UPDATE?

UPDATE D
SET D.Field = D.NewValue
FROM Documents D
JOIN tableWithIDsToUpdate T ON D.iDRegister = T.iDRegister

Возможно, вы все равно захотите пакетировать обновления, чтобы не делать 2,2 миллиона одновременно.

Редактировать

Так как вам также нужно INSERT строк, которые не существуют для обновления, вы можете следовать вышеизложенному с помощью этого:

INSERT INTO Documents (col1, col2, etc)
SELECT col1, col2, etc
FROM tableWithIDsToUpdate T
LEFT JOIN Documents D ON D.iDRegister = T.idRegister
WHERE D.idRegister IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...