如何在 SSIS 中获取 OUTPUT $action, Inserted.*,Deleted.* 记录

Nin*_*per 2 sql-server-2008 sql-server ssis t-sql sql-server-2008-r2

我只是想知道,在MERGET-SQL 中,您可以输出OUTPUT $action,Inserted.*Deleted.*记录。我想问我怎么能得到OUTPUT $actionInserted.*Deleted.*在SSIS记录?

bil*_*nkc 5

你不能,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 应该没有任何不同。