Тупик служб SSIS из-за необходимости параллельных обновлений внутри одной и той же задачи потока данных - PullRequest
0 голосов
/ 27 января 2020

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

  • 1) Использовать уникальный идентификатор в исходной записи, чтобы найти запись, которую вы хотите обновить в таблице назначения.
  • 2) Если идентификатор не существует в таблице назначения, проверьте, является ли email исходной записи вместо этого существует в таблице назначения.
    • a) Если электронная почта существует, обновите целевую запись с помощью электронной почты . Также обновите уникальный идентификатор этой целевой записи.
    • b) Если электронная почта не существует, вставьте новую запись в целевую таблицу.

Итак, простыми словами я создаю задачу, которая будет обновлять таблицу по ее уникальному идентификатору и, если она не соответствует , он будет пытаться обновить свою электронную почту . Если он по-прежнему не находит соответствия, он будет вставлять новую запись.

Это означает, что у меня будет два параллельных обновления, как вы можете видеть на изображении (два обведенных кружком компонента будут работать параллельно) SSIS_Data_Flow_Task

Теперь, из-за этих двух обновлений возникает проблема взаимоблокировки.

Я пытался использовать With (NOLOCK), но этот совет предназначен для чтения данных, а не их обновления. Я также искал задачи задержки, чтобы задержать один из двух конвейеров данных до завершения другого.

Есть идеи? Могу ли я по-другому спроектировать задачу потока данных, чтобы избежать множественных параллельных обновлений?

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 января 2020

с этими типами потоков я всегда работаю с рабочей таблицей (id таблицы dest, тип работы (U или I), ...). на первом этапе я заполняю таблицу работой, которую необходимо выполнить, затем применяю эту работу.

...