Я пытаюсь отладить некоторый устаревший код служб Integration Services и действительно хочу получить подтверждение того, в чем, на мой взгляд, проблема:
У нас есть очень большая задача данных внутри контейнера потока управления. Этот контейнер потока управления настроен с TransactionOption = поддерживается - то есть он будет «наследовать» транзакции от родительских контейнеров, но здесь не настроено ни одного.
Внутри потока данных есть вызов хранимого процесса, который записывает в таблицу с псевдокодом что-то вроде:
"Если запись, которая соответствует этим параметрам, не существует, напишите ее"
Теперь проблема в том, что в этот процесс передаются три записи с одинаковыми параметрами, поэтому логически первая запись не находит соответствия, и запись создается. Вторая запись (с теми же параметрами) также не находит соответствия, и создается другая запись.
Насколько я понимаю, первая «запись», переданная в процесс в потоке данных, не передана и, следовательно, не может быть «прочитана» при втором вызове. В результате все три записи создают строку, когда логически должна быть только первая.
В этом сценарии я прав, полагая, что именно незафиксированная транзакция не дает второму вызову увидеть первый? Даже установка уровня изоляции для контейнера не помогает, потому что он все равно не включен в транзакцию ....
Надеюсь, что это имеет смысл, и любой совет с благодарностью получен. Обходы дают вам божественный статус.