Как избежать повторной вставки данных (дубликатов) в таблицу SQL Server при повторном запуске пакета служб SSIS, который загружает данные? - PullRequest
3 голосов
/ 31 марта 2019

Я создал пакет SSIS.Работает нормально для первого включения.Когда я запускаю пакет через задания агента SQL Server, я получаю дубликаты, вставленные, когда запланированное задание вставляет данные.

Я понятия не имею, как прекратить вставку нескольких повторяющихся записей.

Я ожидаю удалить вставку дубликатов при запуске развернутого пакета через задания SQL Server

enter image description here

Ответы [ 2 ]

2 голосов
/ 31 марта 2019

Для этого есть 2 подхода:

(1) с помощью команды SQL

Этот параметр можно использовать, если источник и пункт назначения находятся натот же сервер

Поскольку вы используете источник ADO.NET, вы можете изменить режим доступа к данным на Команда SQL и выбрать только те данные, которые не существуют в месте назначения:

SELECT *
FROM SourceTable
WHERE NOT EXISTS(
                SELECT 1
                FROM DestinationTable
                WHERE SourceTable.ID = DestinationColumn.ID)

(2) с использованием преобразования «Уточняющий запрос»

Вы можете использовать преобразование «Уточняющий запрос», чтобы получить несовпадающие строки между источником и местом назначения и игнорировать дубликаты:

0 голосов
/ 31 марта 2019

Чтобы удалить дубликаты, используйте задачу SQL со следующим запросом (при условии, что вы не извлекаете миллион строк и хотите удалить дубликаты на извлеченных данных, а не на месте назначения):

with cte as (

select field1,field2, row_number() over(partition by allfieldsfromPK order by allfieldsfromPK) as rownum)
delete from cte where rownum > 1

Тогдаиспользуйте задачу потока данных и вставьте чистые данные в таблицу назначения.

Если вы просто не хотите вставлять дубликаты, очень хорошим вариантом является использование оператора MERGE, более производительной альтернативы.

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