Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis SSI希望基于平面文件更新sql表_Ssis - Fatal编程技术网

Ssis SSI希望基于平面文件更新sql表

Ssis SSI希望基于平面文件更新sql表,ssis,Ssis,对于SSIS来说比较陌生,因此不确定如何处理此问题 我有一个平面文件,我成功地从中读取了它。所以现在我的数据流只包含一个平面文件源 我想做的是这样的: 更新sqls表 设置s.columnA=f.columnA 从平面文件f 其中s.columnID=f.columnID 现在我能看到的唯一方法是将平面文件的内容插入到sql表中,然后进行更新。考虑到我不需要保存平面文件的数据,这似乎是浪费。我只需要根据平面文件中的数据更新现有的sql表。那么,是否有某种方法可以直接在SSIS包中运行查询,而不必

对于SSIS来说比较陌生,因此不确定如何处理此问题

我有一个平面文件,我成功地从中读取了它。所以现在我的数据流只包含一个平面文件源

我想做的是这样的:

更新sqls表 设置s.columnA=f.columnA 从平面文件f 其中s.columnID=f.columnID

现在我能看到的唯一方法是将平面文件的内容插入到sql表中,然后进行更新。考虑到我不需要保存平面文件的数据,这似乎是浪费。我只需要根据平面文件中的数据更新现有的sql表。那么,是否有某种方法可以直接在SSIS包中运行查询,而不必向sql表中插入大量数据,这样我就可以直接删除这些数据了


谢谢

我还没有尝试过,但是您是否尝试过发送到记录集目标,然后使用该目标运行更新?

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

我想您会发现,将平面文件行发送到数据库表并运行单个更新将是处理大量数据的最佳方式。

从平面文件f更新SqlTable S set S.columnA=f.columnA,其中S.columnID=f.columnID

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

您有两种选择:

  • 在数据流中使用OLEDB命令。缺点是这会为每条记录调用语句,因此如果有1000条记录,则效率非常低
  • 使用OLE DB目标将记录推送到表中,然后可以使用执行SQL任务调用更新。如果愿意,可以截断该表
  • 第三种可能的选择是滚动您自己的OLEDB目的地,对记录集和记录进行更新


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

    将大容量加载到临时表中,然后从临时表执行更新。正如前面的一张海报所说,在对数据进行更多的处理之前,将数据填充到暂存区域,然后删除或截断表,这是一种非常常见的做法

    不,我没有,但我现在就尝试一下,让您知道它是否有效。谢谢-不知道怎么做。我添加了一个记录集目标-但是如何与该记录集交互?我无法将流控件从记录集目标拖到ole db目标。真的吗?将一堆记录导入到一个我不需要的表中似乎是相当浪费/低效的,并且在整个过程完成后会立即转储这些记录。如果那是正确的/最好的方法,那么我会那样做。