如何在 SQL 命令中为 OLE DB 目标引用输入列?



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

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

我收到错误"列名'rowId'无效">

我想我应该写一些类似[输入列]的东西。[rowId] 但我不太清楚。

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

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

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

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

  2. 在SQL中创建一个缓冲区表,清除它(以防万一(,使用OLE DB目标将所有更改的行存储在那里。然后在数据流旁边的步骤(即"执行 SQL 任务"(上,使用一些 SQL 命令(如

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

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

最新更新