Как ссылаться на столбцы ввода в команде 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. Вы можете подойти к этому двумя способами.

  1. На последнем этапе создайте преобразование команды OLE DB. Просто, для вашего образца вы должны написать что-то вроде

    UPDATE [queryTable]
    SET [Query] = ?
    WHERE [Id] = ?  
    

    и на вкладке Column Mapping редактора - сопоставьте первый параметр сqueryString поле а второй - к rowId.
    Просто, легко сделать, но неэффективно - каждая строка будет обработана в отдельной транзакции SQL.

  2. Создайте буферную таблицу в SQL, очистите ее (на всякий случай), сохраните там все измененные строки с помощью OLE DB Destination. Затем на шаге рядом с потоком данных, который будет выполнять задачу SQL, обновите вашу таблицу данными из вашей буферной таблицы с помощью некоторой команды SQL, например

    UPDATE [queryTable]
    SET [queryTable].[Query] = [buffer].[queryString]
    FROM [queryTable] 
    INNER JOIN [buffer] ON [queryTable].[Id] = [buffer].[Id]  
    

    Что ж, это будет намного быстрее, так как все модификации будут в одной транзакции. Но - пакет SSIS будет сложнее, и вам придется создать дополнительную таблицу.

Другие вопросы по тегам