哪个SSIS系统变量包含错误文本

时间:2012-02-06 01:22:25

标签: ssis

我正在使用SQL Server 2008 Job运行SSIS包。程序包在运行时会在某些时候崩溃。我创建了自己的机制来获取错误并将其记录在表中。所以我可以看到特定任务出错,但无法找到错误。

当我从BIDS运行相同的包时,它完美无缺。没错。

我想要做的是,我需要将该错误字符串写入我自己的表中,该表显示在“执行结果”选项卡中。

所以问题是哪个系统变量在SSIS中保存错误字符串。

3 个答案:

答案 0 :(得分:12)

错误存储在ErrorDescription system variable中。有关如何获取错误说明的示例,请参阅Handling Errors in the Data Flow

此外,如果要将错误信息捕获到表中,SSIS使用logging支持SQL Server Log Provider到表。您还可以自定义日志记录。

答案 1 :(得分:1)

太简单了。

  1. 左键单击(突出显示)要捕获错误事件的对象(脚本或数据流等)
  2. 单击“事件处理程序”-屏幕应打开,其中包含您单击的Executable =对象,事件处理程序= OnError
  3. 单击URL(单击此处创建...。)
  4. 从SSIS工具箱中拖动执行SQL对象
  5. 配置到要包含错误消息的数据库/表
  6. 将插入内容写入DB.Schema.Table(DBName,SchemaName,TableName,ErrorMessage,DateAdded)
  7. 写值(?,?,?,'我很聪明',getdate())
  8. 单击“参数”,然后选择USER :: Variables作为?的+我的注释。

由于这是在数据库服务器上运行的,因此它将传入?。我的SAC已经作为值存在于数据库中,但是您将选择System :: ErrorDescription作为参数3。请记住,此数组基于0。不要尝试命名参数。而是将它们编号为0到〜?数据类型基于您的工作情况。我的都是VARCHAR,所以...:)

与仅记录服务器允许您执行的操作相比,这是一个更好的解决方案。 我还可以添加一个计数器变量,并在需要的地方进行调整。然后将其传递给事件OnError。这将使我能够准确指出上一个成功对象的完成位置;在脚本对象中效果最好,但在其他领域也可以使用。

我正在使用它,因此我可以处理数千个周期而不会实际使包装失效。如果表不存在或列不存在,我只需将其记录下来以备后用。哦,是的,我正在遍历数百个数据库,这些数据库捕获了它们的体系结构和使用的最大列大小。不要与最大列大小混淆。 示例:TelephoneNumber来自char(500)的源列(这肯定是不好的编程,但是...您无法更改所有内容..)。我捕获该列的最大len并调整目标列以适应该大小+/-一定百分比。

如果表不存在或列不存在,我将记录错误并继续搅拌。最后,我可以评估这些条目并查看是否可以从仓库中真正删除它们。这种情况在TEST和STAGE环境中比在PROD中发生的更多。但是,当对PROD进行更改时,我肯定会在即将进入仓库时将其识别出来。

所有内容均已配置,包括动态MERGE / JOIN,INSERT,SELECT,ELEMENTS,SIZES,USAGESIZE,IDENTITY,SOURCEORDER等,并将数据转换为目标数据类型。

所有这些都是因为系统版本的日志记录无法为您提供此类操作所需的详细信息。如果正确设置,则此OnError事件处理程序可以。

答案 2 :(得分:0)

检查this了!他已经逐步解释了如何配置具有错误消息参数的SSIS日志记录。