SSIS: источник в Excel - можно ли отслеживать изменения, сделанные в Excel? - PullRequest
2 голосов
/ 26 сентября 2019

Допустим, у меня есть следующие столбцы в Excel: уровень, группа, код, имя, дата, дополнительная информация со следующими значениями:
1, A, 1234, John, 2019-09-01, info 1
1, A, 1234, John, 2019-09-01, info 2

В настоящее время у меня есть следующая логика для импорта: если в базе данных нет записи с определенным кодом и уровнем, то новая записьбудет вставлен, если код уже существует в базе данных, то запись будет обновлена.Но так как в Excel нет уникального идентификатора, обновить правильную запись довольно сложно.Каковы общие подходы в таких случаях?

Допустим, в приведенном выше примере группа или дата будут изменены для одной записи.Как реализовать логику, которая обновляет правильную запись в БД.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Поскольку у вас нет уникального идентификатора, вы должны попытаться создать свой собственный.В аналогичном случае я буду использовать производный столбец для объединения всех значений, которые, я уверен, не изменятся.Как пример:

Level + "|" + Code + "|" + Name + "|" + Additional info

Затем я сравню исходные данные и существующие данные на основе этого производного столбца.Вы можете сохранить эти производные столбцы в целевой базе данных или использовать промежуточную таблицу для хранения этих значений.

0 голосов
/ 26 сентября 2019

Вы не сможете получить отдельный набор данных, если нет уникального первичного ключа.Без такого первичного ключа вы не сможете обновить только одну строку, а вместо этого обновить одну или несколько похожих строк.В текущем состоянии невозможно точно отслеживать изменения.

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

1, A, 1234, John, 2019-09-01, Info1, DateCreated, DateChanged
1, A, 1234, John, 2019-09-01, Info2, DateCreated, DateChanged2
1, A, 1234, John, 2019-09-01, Info3, DateCreated, DateChanged3

Важно помнить, что это работает только со статическим первичным ключом, некоторые поля, которые обычно используются для составных ключей, могут не работать.Пользователи могут изменить свое имя или исправить неправильно введенную дату рождения, что может изменить некоторые составные ключи.

В SSIS это будет реализовано с использованием двух задач поиска:

  • В первой задаче поиска сравните первичный ключ.Если первичный ключ не существует, используйте задачу «Производный столбец», чтобы установить для DateCreated и DateModified значение GETDATE ().
  • Если первичный ключ существует, запустите вторую задачу поиска, которая сравнивает все строки в записи.Если все они идентичны, это означает, что в записи не было никаких изменений, и обновление не нужно отправлять в базу данных.
  • Если есть разница, используйте задачу SSIS «Производный столбец», чтобы обновить столбец DateModified только до GETDATE () и добавить его в качестве новой строки.

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

...