2

我想知道实现执行 SQL 任务日志记录的最佳方法是什么。例如,对于我的每个 Execute SQL Task 组件,我想记录以下内容:

1) SQL 任务的描述。2) SQL 任务中使用的 SQL 语句。3) SQL 语句的结果。SQL 语句返回一个标量值。4) SSIS 正在创建的作业运行 ID,即 SSIS 创建的 Operation_Id。

目前,这就是我实现它的方式,这是非常重复的。

1) 对于每个执行 SQL 任务(我们称之为 mySQLTask),我在 mySQLTask 的执行后事件中创建另一个名为“日志结果”的执行 SQL 任务。2) 我创建了一个名为 Log_Result 的存储过程,它从“日志结果”执行 SQL 任务中执行。3) 然后我从 mySQLTask 复制 SQL 语句并将其作为硬编码参数粘贴到存储过程参数中。例如,在 SQL 语句属性的“日志结果”SQL 任务中...“EXEC Log_Result ?,?,'SELECT COUNT(*) FROM TABLE',?

有没有办法可以动态地从 mySQLTask 检索 SQL 语句?有没有更好的方法来做到这一点?

我还探索了 SSIS 在日志记录功能中的 ExecuteSQLExecutingQuery 选项的内置日志记录。它给了我执行的 SQL 语句,但我也想跟踪结果。

谢谢。

4

1 回答 1

0

我强烈推荐这本书和其中包含的日志框架:

Microsoft SQL Server 2008 集成服务:问题、设计、解决方案

国际标准书号:978-0-470-52576-0

如果我正确理解了您的问题,我会说它完全符合您的要求。代码下载链接在这里。

如果我正确理解了您的问题,我会说如果您从具有 SQL Server 配置类型的包配置中配置执行 SQL 任务 SQLStatement 属性,它可以用于执行您所描述的操作。

这将允许您将 SQL 语句保存在 SQL Server 中的一个表中,您可以查询该表并将其连接到包含每个包任务日志的其他表。

它的设置非常简单,而且非常强大。作者在逐步引导您完成这一方面做得非常出色。应该需要大约一天的时间才能启动并运行。

记录执行 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
)
于 2013-12-15T03:08:37.423 回答