(我不是一个足够的成员,在我的帖子中包含屏幕截图 - 这里是一个指向共享的OneDrive文件夹的链接,该文件夹中的图片文章可以更好地解释https://1drv.ms/f/s!Ai9bJ2dV87SLg9h5FP84If74hyUK4Q)
我试图通过SSIS包工作流程中的执行SQL任务来记录特定存储过程在执行后插入,更新和删除的内容。有一个第三方实现的自定义日志记录方法,但它通过将System ParentContainer ID与用户任务ID相关联来工作,该用户任务ID充当记录此类信息的存储过程的参数。 1)我认为这不会起作用执行SQL任务和2)我想要一个超出DML功能发生的详细程度。
通过设置结果集,使用变量和使用派生列任务的相邻数据流任务来检索变量并插入日志表,我成功地记录了“单行”。
作为我目前工作方法的一个例子:
Exec SQL任务设置
记录的数据流部分的详细信息
我现在遇到执行多个插入的存储过程,因此我需要记录其他详细信息 - 多行。我在proc中创建了变量来检索这个多INSERT场景,并在SP中有一个union union选择,产生以下结果集。
据我所知,我现在需要使用完整结果集设置,但是对于此应用程序,使用什么方法将结果集持久保存到另一个步骤(对我来说是一个目的地以便记录)。在研究中,我理解如何使用Foreach循环容器,但这似乎可以配置为一个需要是值类型对象的变量。我目前在这里有4个变量,无法在Foreach对象的Collection部分中进行设置。
我希望能够完全实现这一点或建议另一种方法。
提前多多感谢!
答案 0 :(得分:1)
您的INSERT_B_BUDGET SQL任务生成多行,您希望使用Foreach循环来捕获完整的结果集,对吗?
创建一个变量LoopObject,数据类型为Object。
编辑INSERT_B_BUDGET任务,
<常规选项卡中的,将ResultSet更改为完整结果集
在Result Set选项卡中,Variable Name as LoopObject。
在INSERT_B_BUDGET任务后添加Foreach循环容器,将Logging 1任务移动到容器中。
在Collection选项卡,Enumerator中,选择Foreach ADO Enumerator,ADO对象源变量作为LoopObject,枚举模式,在第一个表中选择Rows。
在Variable Mappings中,添加现有的4个变量。
答案 1 :(得分:0)
您必须设置探查器跟踪以跟踪正在执行的操作。您应该按数据库和用户在跟踪上设置过滤器,并使用SQLProfilerTSQL_SPs模板。