Как ссылаться на столбцы ввода в команде SQL для назначения OLE DB?
У меня есть задача потока данных. Последний шаг - компонент "Назначение OLE DB". Моя цель - обновить существующую таблицу. В таблице есть поля Id, Query и некоторые другие. Назначение OLE DB имеет входные столбцы rowId, queryString. Я пытаюсь использовать команду DataAccessMode: SQL. Но если я напишу что-то вроде
UPDATE [queryTable]
SET [Query] = [queryString]
WHERE [Id] = [rowId]
Я получаю сообщение об ошибке "Неверное имя столбца 'rowId'"
Думаю, мне следует написать что-то вроде [Входные столбцы].[RowId], но я точно не знаю.
1 ответ
Что ж, вы хотите обновить существующую таблицу в SSIS. Вы можете подойти к этому двумя способами.
На последнем этапе создайте преобразование команды OLE DB. Просто, для вашего образца вы должны написать что-то вроде
UPDATE [queryTable] SET [Query] = ? WHERE [Id] = ?
и на вкладке Column Mapping редактора - сопоставьте первый параметр с
queryString
поле а второй - кrowId
.
Просто, легко сделать, но неэффективно - каждая строка будет обработана в отдельной транзакции SQL.Создайте буферную таблицу в SQL, очистите ее (на всякий случай), сохраните там все измененные строки с помощью OLE DB Destination. Затем на шаге рядом с потоком данных, который будет выполнять задачу SQL, обновите вашу таблицу данными из вашей буферной таблицы с помощью некоторой команды SQL, например
UPDATE [queryTable] SET [queryTable].[Query] = [buffer].[queryString] FROM [queryTable] INNER JOIN [buffer] ON [queryTable].[Id] = [buffer].[Id]
Что ж, это будет намного быстрее, так как все модификации будут в одной транзакции. Но - пакет SSIS будет сложнее, и вам придется создать дополнительную таблицу.