返回当前 SSIS 错误计数

5
在SSIS包中,有一个MaximumErrorCount属性。使用此属性意味着在包执行期间,包正在计算错误的数量。
在特别复杂的一组包的执行过程中(通常在各个点上将MaximumErrorCount设置为更高的级别),我希望能够捕获当前错误计数 - 但我似乎找不到这样做的机制。
理想情况下,它将是一个系统变量(据我所见它并不是),因此我可以随意构建表达式,但更糟糕的是,我似乎也无法在脚本中捕获它(我的VB.net技能很差,所以我可能错过了,但我已经谷歌和搜索Object Browser没有成功)。
任何SSIS Guru都知道我如何在包执行过程中的给定点捕获当前错误计数吗?
(我已经尝试将一个简单的变量增量嵌入到包级别的OnError事件处理程序中,但在极少数情况下,这似乎与引擎“计数”的实际错误数量不同步。而且无论如何,如果有内置计数器,那将是非常优选和更加优雅的解决方案)
提前致谢。

所有任务都存在MaximumErrorCount,而在包级别上则是“+”。在我看来,调整这个值并不是一个明智的想法。最终,你可能会四处奔波,试图弄清楚每个任务有什么值,除非你想为所有任务和包保持标准水平。 - rvphx
谢谢你的建议,rvphx。但是这些包是继承而来的。我的任务是对它们进行故障排除,而不是重写它们(我希望可以这样做!!) - AndyBrown
通常处理捕获错误数据的方式是通过日志记录。错误计数很有趣,但错误的详细信息更有帮助。我会在程序包中设置日志记录,然后如果您想要收集每次执行的错误计数,可以查询日志表。 - Mark Wojciechowicz
马克,谢谢你的好主意,但这些包中已经有日志记录了,这对于在执行后检索最终错误计数是很好的。我很好奇是否有一种方便地返回当前错误计数的方法(在包执行期间的某些点)并相应地采取行动(例如,在控制流中,如果ErrorCount> 3,则流A,如果ErrorCount <= 3,则流B)。 - AndyBrown
1个回答

3
通常,您可以使用约束来指导错误处理的流程。例如,如果特定任务失败,则使用失败约束来控制流程。如果您想基于错误数量创建容差,您需要在每个任务后捕获每个错误并将其存储在一个变量中(同样使用约束和脚本任务)。
我认为没有一个暴露当前任务或容器错误数量的计数器,但这样的计数器将被限定在每个对象和包本身范围内。即使您能够访问它,这听起来也很难处理。
我的建议是尽可能地使用现有功能:
- 使用约束来指导成功和失败的行为 - 不要使用事件处理程序,因为它们就像是一个看不见的GOTO,您永远不知道它们在哪里 - 继续努力使代码成功而不是容忍错误。提高最大错误计数并不知道任何问题发生是令人恐惧的。我的意思是,除非您不关心数据。我没有在那个评论中开玩笑 - 在将数据迁移到测试环境中,这可能是完全可以接受的行为。 - 谨慎使用变量。在某些包中可能有几个关键点需要注意,因此不要添加一堆变量,否则将更加难以进行故障排除和维护。如果您可以随着时间的推移将最大错误计数降低到1,那么您可能只需更改包中的几个点(80/20?)。如果您真的不得不重写整个东西,那么...那么它从一开始就是垃圾,再见!

嗨,马克,我已经点赞并将你的答案标记为答案,因为我也通过死命谷歌搜索得出结论,即访问系统错误计数器的特定问题根本不可能,因为它似乎没有被公开,而你的建议非常接近我自己对这些(可怕的!)包的整个问题的想法!感谢你的考虑。 - AndyBrown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接