我想知道实现执行SQL任务日志记录的最佳方法是什么。例如,对于我的每个Execute SQL Task组件,我想记录以下内容:
1)SQL任务的描述。 2)SQL任务中使用的SQL语句。 3)SQL语句的结果。 SQL语句返回标量值。 4)正在创建的SSIS的作业运行ID是SSIS创建的Operation_Id。
目前,这就是我实施它的方式,这是非常重复的。
1)对于每个执行SQL任务(让我们称之为mySQLTask),我在mySQLTask的Post-Execute事件中创建另一个名为“Log Result”的执行SQL任务。 2)我创建一个名为Log_Result的存储过程,该过程从“日志结果”执行SQL任务执行。 3)然后我从mySQLTask复制SQL语句并将其作为硬编码参数粘贴到存储过程参数。例如,在SQL语句属性的“日志结果”SQL任务中...“EXEC Log_Result?,?,'SELECT COUNT(*)FROM TABLE',?
有没有办法可以动态地从mySQLTask中检索SQL语句?是否有更好的方法来做到这一点?
我还在Logging功能中的ExecuteSQLExecutingQuery选项的内置日志记录中探索了SSIS。它给了我执行的SQL语句,但我也想跟踪结果。
感谢。
答案 0 :(得分:0)
我高度推荐这本书及其中包含的登录框架:
Microsoft SQL Server 2008集成服务:问题,设计,解决方案
如果我正确地理解了你的问题,我会说它完全符合你的要求。 Code download link here.
如果我正确理解了您的问题,我会说如果您从具有SQL Server配置类型的程序包配置中配置执行SQL任务SQLStatement属性,它可用于执行您所描述的操作。
这将允许您将SQL语句保存在SQL Server中的一个表中,您可以查询并连接到包含每个Package Task的日志的其他表。
设置非常简单且相当强大。作者非常出色地指导您逐步完成这一过程。你需要花一天时间才能搞定它。
记录执行SQL任务的标量结果将是对SSIS PDS框架的增强。但我不会过分担心:应该很好地适应开箱即用的PackageTaskLog表。我在下面提供了PackageTaskLog脚本供您参考。
CREATE TABLE [adm].[PackageTaskLog](
[PackageTaskLogID] [int] IDENTITY(1,1) NOT NULL,
[PackageLogID] [int] NOT NULL,
[SourceName] [varchar](255) NOT NULL,
[SourceID] [uniqueidentifier] NOT NULL,
[StartDateTime] [datetime] NOT NULL,
[EndDateTime] [datetime] NULL,
CONSTRAINT [PK_PackageTaskLog] PRIMARY KEY CLUSTERED
(
[PackageTaskLogID] ASC
)