大量删除和插入

问题描述 投票:0回答:1

我正在尝试创建一个脚本来检查寄存器是否存在,如果存在,它会删除它并插入一个带有更新数据的新寄存器。我用一个程序创建脚本,该程序将文件从一个NAS复制到另一个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')

这非常有效,但我必须为220万个寄存器做同样的事情。有没有什么办法可以删除以前的寄存器,如果它存在,然后使用批量插入?

sql sql-server sql-server-2005
1个回答
1
投票

你能改变UPDATE吗?

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

您可能仍希望批量更新更新,因此您不会同时执行220万次更新。

编辑

由于您还需要更新不存在的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
© www.soinside.com 2019 - 2024. All rights reserved.