ssis想要基于平面文件更新sql表

时间:2010-12-17 23:00:24

标签: ssis

SSIS的新手,所以不知道如何处理这个问题。

我有一个平面文件,我设法成功读取。所以现在我的数据流只包含一个平面文件源。

我想做的是这样的事情:

更新SqlTable S. set s.columnA = f.columna 来自FlatFile f 其中s.columnID = f.columnID

现在,我能看到这样做的唯一方法是将平面文件的内容插入到sql表中,然后进行更新。考虑到我不需要保存平面文件的数据,这似乎很浪费。我只需要根据平面文件中的数据更新现有的sql表。那么是否有一些方法可以直接在SSIS包中运行查询,而不必将一堆数据插入到我最终会丢弃的sql表中?

感谢

4 个答案:

答案 0 :(得分:2)

从FlatFile f更新SqlTable S set s.columnA = f.columna,其中s.columnID = f.columnID

上面的语句是一个SQL语句。您无法将sql表连接到平面文件。您需要在SQL中进行更新,因为这是表所在的位置

您有两个选择:

  1. 在数据流中使用 OLEDB Command 组件。缺点是这会调用每条记录的语句,所以如果你有1000条记录,效率非常低。
  2. 使用 OLE DB目标将记录推送到表格,然后您可以使用执行SQL任务来调用更新。如果您愿意,可以截断表格
  3. 可能的第三个选项是滚动您自己的OLE DB目标,以对记录集和记录进行更新。

    虽然这可能听起来很浪费,但要在数据库中创建一个表来存储更新记录,这种方法很常见。您只需删除工作表或完成后截断。

答案 1 :(得分:1)

您可以将OLE DB命令组件添加到从平面文件中检索数据的数据流。 OLE DB命令将对从平面文件检索的每个记录执行单行更新。如果平面文件中的行很少,这可能没问题;但是,你可以想象如果平面文件中有很多行,性能会有多差。

我认为您会发现将平面文件行发送到数据库表并运行单个UPDATE将是大量数据的最佳执行者。

答案 2 :(得分:0)

我没试过这个,但您是否尝试过发送到记录集目的地然后使用它运行更新?

答案 3 :(得分:0)

批量加载到临时表中是一种方法,然后从临时表中进行更新。正如之前的一张海报所说,在对数据进行更多工作然后删除或截断表之前,将数据填充到临时区域是一种常见的方法