0

我有数据流任务。它的最后一步是 OLE DB 目标组件。我的目标是更新现有表。该表具有字段 Id、Query 和其他一些字段。OLE DB 目标具有输入列 rowId、queryString。我正在尝试使用 DataAccessMode: SQL 命令。但是如果我写类似的东西

UPDATE [queryTable]
SET [Query] = [queryString]
WHERE [Id] = [rowId]

我收到错误“无效的列名 'rowId'”

我想我应该写一些类似 [Input Columns].[rowId] 的东西,但我不太清楚。

4

1 回答 1

0

好吧,您想更新 SSIS 中的现有表。您可以通过两种方式处理它。

  1. 创建OLE DB 命令转换作为最后一步。很简单,对于您的示例,您应该编写类似

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

    并在编辑器的列映射选项卡上 - 将第一个参数映射到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 包会更复杂,你必须创建一个额外的表。

于 2020-07-06T04:36:34.410 回答