1

我们有一个 SSIS 包,它通过 EXECUTE SQL TASK 组件调用存储过程。存储过程包含许多不同的 sql 代码,这些代码动态构建,然后在存储过程中通过 exec strSQL 执行。整个系统都是这样构建的,我们此时无法重新设计。问题是,当存储过程中出现故障时,很难从 SSIS 中找出存储过程中的哪些 SQL 语句导致了异常/失败。我们现在拥有并且正在工作的是带有代码的 onError 事件包,用于读取 System::ErrorDescription,这有助于在 SSIS 中显示错误,然后发送带有错误的电子邮件,这是有效的。我什么 我想要添加的是有一个系统变量或其他方式来显示 SSIS 中的实际 SQL(导致存储过程中出现异常的那个),我可以将其包含在电子邮件中。有任何想法吗?谢谢。

4

2 回答 2

1

我有一个解决方案。表变量不会在 catch 块和回滚语句中发挥作用。

因此,在 sql 语句运行到具有 nvarchar (max) 数据类型的表变量之前,请将它们放入。确保您的 proc 使用 try catch 块和事务。在 catch 块中,如果需要,执行回滚,然后将表变量的内容和日期时间插入到日志表中。现在您可以准确记录运行了哪些查询。如果这也是一个问题,您还可以创建一个单独的表变量来存储您尝试插入或更新的数据。

于 2013-01-31T15:26:21.003 回答
1

当您使用 F5 运行包并且 SQL 语句失败时,您可以检查执行结果选项卡,但不幸的是,这仅显示您的 SQL 语句的第一行或第二行。

不要使用 F5 运行包,而是使用 Crtl+F5 运行它。这将打开一个终端窗口并运行包,就好像它是从命令行调用的一样。每个任务运行时都会输出日志信息,如果任务使用 SQL 语句并且失败了,它会输出完整的 SQL 语句。

Ctrl+F5 被称为 'Start without Debugging' 但我一直认为调试包更好。

于 2013-10-29T17:11:19.627 回答