Курсоры, как правило, будут работать медленнее, поскольку они работают построчно.Использование основанных на множестве операций, таких как объединение, даст лучшую производительность.Он несколько старше, но в этой статье подробно описываются последствия использования курсоров в отличие от операций над множествами.Я не совсем уверен, какие столбцы вы хотите использовать для проверки совпадений, а также какие данные добавить, но ниже приведен базовый пример, и вы можете заполнять столбцы по мере необходимости.Таблица Email была использована в примере.Для UPDATE
это обновит существующие строки на основе соответствующих строк в исходной таблице.Будучи INNER JOIN
, будут затронуты только строки с совпадениями с обеих сторон.Во втором операторе это INSERT
, в котором используются только строки из исходной таблицы, которых нет в таблице электронной почты.Эту же функциональность также можно выполнить с помощью оператора MERGE
, однако с этим связан ряд проблем, включая проблемы с блокировками и нарушениями ключа.
Обновление существующих строк:
UPDATE E
SET E.ColumnA = SRC.ColumnA,
E.ColumnB = SRC.ColumnB
FROM YourDatabase.YourSchema.Email E
INNER JOIN YourDatabase.YourSchema.SourceTable SRC
ON E.Email = SRC.Email
Добавить новые строки:
INSERT INTO YourDatabase.YourSchema.Email (ColumnA, ColumnB)
SELECT
ColumnA,
ColumnB
FROM YourDatabase.YourSchema.SourceTable
WHERE EMAIL NOT IN ((SELECT EMAIL FROM YourDatabase.YourSchema.Email))