Каков синтаксис для выполнения параметризованного удаления с использованием объединений в SSIS 2008? - PullRequest
0 голосов
/ 26 апреля 2011

Я пытаюсь использовать команду OLE DB для удаления, используя данные из каждой строки моего входного файла.Фактический запрос работает нормально при запуске вручную на сервере sql (данный tableB.otherID сравнивается с int), но у меня возникают проблемы с его параметризацией.

delete tableA from tableA
where tableA.ID = ?

Вышеприведенный запрос выполняется и позволяет мненазначить один из моих входных столбцов для tableA.ID.Это то, что я ожидал.

Попытка

delete tableA from tableA 
INNER JOIN tableB ON tableB.ID = tableA.ID
where tableB.OtherID = ?

Однако выдает ошибку («Не удалось связать идентификатор таблицы из нескольких частей B.OtherID»).Жесткое кодирование значения вместо '?'останавливает появление этой ошибки.

Похоже, что это будет правильный синтаксис, что-то не так с приведенным выше?

Ответы [ 4 ]

1 голос
/ 09 мая 2011

Это похоже на ошибку / ограничение в SSIS, я не смог выполнить аналогичные параметризованные операторы обновления с помощью объединения.

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

0 голосов
/ 26 апреля 2011
DELETE FROM tableA 
FROM tableA INNER JOIN tableB ON tableB.ID = tableA.ID 
WHERE tableB.OtherID = @OrderId

Где @OrderID должна быть вашей переменной в SSIS.

0 голосов
/ 26 апреля 2011

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

Если это произойдет, решение, которое сработало для меня, - это поместить ключи строк, которые необходимо удалить, в промежуточную таблицу, а затем, когда они все там, выдают один оператор, который удаляет все эти строки вединичное утверждение и чистка промежуточного стола.Гораздо быстрее, добавленное преимущество заключается в том, что вам не нужно использовать причудливый?синтаксис.Мне никогда не нравилось это, слишком легко смешивать вещи, когда sql становится немного сложнее.

С уважением, Герт-Ян

0 голосов
/ 26 апреля 2011

Я думаю, что синтаксис TSQL, который вы хотите:

DELETE FROM tableA 
FROM tableA INNER JOIN tableB ON tableB.ID = tableA.ID 
WHERE tableB.OtherID = ? 
...