Nin*_*per 2 sql-server-2008 sql-server ssis t-sql sql-server-2008-r2
我只是想知道,在MERGE
T-SQL 中,您可以输出OUTPUT $action
,Inserted.*
和Deleted.*
记录。我想问我怎么能得到OUTPUT $action
,Inserted.*
,Deleted.*
在SSIS记录?
你不能,ish,是简短的答案。
您在一个数据流任务中有 3 个可以修改数据的组件。OLE DB/ADO.NET 目标、OLE DB 命令和脚本组件。
对于这个答案,我忽略了脚本组件,因为它是组件的瑞士军刀。如果您想做一些非常糟糕的事情,脚本组件将允许您这样做。用微型锯砍伐红杉树是否现实是另一回事。
OLE DB Destination 就是一个目的地。它不会推出行,它只会消耗它们。是的,从技术上讲,它可以推送行,但这只是通过错误输出路径,仍然无法解决访问 OUTPUT 虚拟表的问题。
OLE DB 命令听起来很有希望。它可以向您的数据流添加额外的列。big, BIG, BIG 的缺点是它不是基于集合的组件。它将对流经的每一行进行操作。如果有数十、数百甚至数千行,这种单例行为可能不会杀死您的系统。MERGE
数十万+ 的数据可能会让您过得很不愉快。
如果您对这种方法感到厌烦,那么认识到MERGE的失败,使其成为 SSISey 的方法是具有两个数据流组件。
第一个将所有数据写入目标表。使用您现有的 DF 并将所有数据写入新表。
第二个新数据流使用您的 MERGE 语句以及根据需要定向的随附虚拟表。我谈到了一个删除第一个模式,它在那个 SO 问题上使用了 OUTPUT 表,所以 MERGE 应该没有任何不同。
归档时间: |
|
查看次数: |
3895 次 |
最近记录: |