SSIS的新手,所以不知道如何处理这个问题。
我有一个平面文件,我设法成功读取。所以现在我的数据流只包含一个平面文件源。
我想做的是这样的事情:
更新SqlTable S. set s.columnA = f.columna 来自FlatFile f 其中s.columnID = f.columnID
现在,我能看到这样做的唯一方法是将平面文件的内容插入到sql表中,然后进行更新。考虑到我不需要保存平面文件的数据,这似乎很浪费。我只需要根据平面文件中的数据更新现有的sql表。那么是否有一些方法可以直接在SSIS包中运行查询,而不必将一堆数据插入到我最终会丢弃的sql表中?
感谢
答案 0 :(得分:2)
从FlatFile f更新SqlTable S set s.columnA = f.columna,其中s.columnID = f.columnID
上面的语句是一个SQL语句。您无法将sql表连接到平面文件。您需要在SQL中进行更新,因为这是表所在的位置
您有两个选择:
可能的第三个选项是滚动您自己的OLE DB目标,以对记录集和记录进行更新。
虽然这可能听起来很浪费,但要在数据库中创建一个表来存储更新记录,这种方法很常见。您只需删除工作表或完成后截断。
答案 1 :(得分:1)
您可以将OLE DB命令组件添加到从平面文件中检索数据的数据流。 OLE DB命令将对从平面文件检索的每个记录执行单行更新。如果平面文件中的行很少,这可能没问题;但是,你可以想象如果平面文件中有很多行,性能会有多差。
我认为您会发现将平面文件行发送到数据库表并运行单个UPDATE将是大量数据的最佳执行者。
答案 2 :(得分:0)
我没试过这个,但您是否尝试过发送到记录集目的地然后使用它运行更新?
答案 3 :(得分:0)
批量加载到临时表中是一种方法,然后从临时表中进行更新。正如之前的一张海报所说,在对数据进行更多工作然后删除或截断表之前,将数据填充到临时区域是一种常见的方法