【问题标题】:How to reference Input Columns in SQL Command for OLE DB Destination?如何在 SQL 命令中为 OLE DB 目标引用输入列?
【发布时间】:2020-06-30 13:59:46
【问题描述】:

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

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

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

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

【问题讨论】:

标签: sql-server ssis oledbdestination


【解决方案1】:

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

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

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

    在编辑器的 列映射 选项卡上 - 将第一个参数映射到 queryString 字段,将第二个参数映射到 rowId
    简单、容易做,但性能不佳 - 每一行都将在其自己的 SQL 事务中处理。

  2. 在 SQL 中创建一个缓冲表,清除它(以防万一),用 OLE DB 目标 将所有更改的行存储在那里。然后在 Data Flow 旁边的步骤中,即 Execute SQL Task,使用一些 SQL 命令(如

    )使用缓冲表中的数据更新表
    UPDATE [queryTable]
    SET [queryTable].[Query] = [buffer].[queryString]
    FROM [queryTable] 
    INNER JOIN [buffer] ON [queryTable].[Id] = [buffer].[Id]  
    

    嗯,它会更快,因为所有修改都将在一个事务中进行。但是 - SSIS 包会更复杂,您必须创建一个额外的表。

【讨论】:

    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多