在本文中,我选择 OnInformation 事件为例。也就是说,我给序列容器执行体创建了一个OnInformation 事件处理程序。这样一来,每当容器内任何任务或容器本身产生 OnInformation 事件时, OnInformation 事件处理程序就会执行其已定义的任何行为。 第4步∶开发工作流 选择可执行体和事件只是你进行创建事件处理程序的第一步。
事件处理程序要有实际意义,必须执行一些实际行为。 定义工作流行为的方法跟定义控制流的方法一样。如果你回到图3,你可以看到事件处理程序设计界面有一个链接。一旦你选择了执行体的和事件,你应该点击该链接激活设计界面,然后创建初始事件……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号

TechTarget
官方微博

TechTarget中国
在本文中,我选择 OnInformation 事件为例。也就是说,我给序列容器执行体创建了一个OnInformation 事件处理程序。这样一来,每当容器内任何任务或容器本身产生 OnInformation 事件时, OnInformation 事件处理程序就会执行其已定义的任何行为。
第4步∶开发工作流
选择可执行体和事件只是你进行创建事件处理程序的第一步。事件处理程序要有实际意义,必须执行一些实际行为。
定义工作流行为的方法跟定义控制流的方法一样。如果你回到图3,你可以看到事件处理程序设计界面有一个链接。一旦你选择了执行体的和事件,你应该点击该链接激活设计界面,然后创建初始事件处理程序。这个活动是专门针对你正创建的事件处理程序的执行体或者事件对的。假如你选择一个不同的执行体或者事件对,设计界面会再一次出现图形3那样的界面。
在你激活设计界面之后,就要添加控制流元素到该界面,如图6所示。在这种情况下,我增加了一个执行SQL的任务。这样一来,每当序列容器或它的任务之一产生 OnInformation 事件时,执行SQL的任务便会运行。你可以同样容易地增加其他的任务,比如发出邮件任务或消息队列任务。就像控制流一样,你可以使用优先限制来连接工作流任务并把任务封入容器,而且你可以在你的容器和任务中使用系统变量和用户定义变量。
图6∶给设计界面添加控制流元素。
第5步∶使用变量
图6中的变量窗口显示了使用变量的方法,这些变量的作用域对已选择的执行体是可用的。在这里,我用了几个系统变量把 OnInformation 事件日志记录到 SQL Server 中的 SSIS_events 表。我使用下面的Transact-SQL来创建这个表。
CREATE TABLE dbo.SSIS_events ( EIGUID UNIQUEIDENTIFIER NOT NULL, PackageName NVARCHAR(50) NOT NULL, SourceName NVARCHAR(50) NOT NULL, EventInfo NVARCHAR(200) NOT NULL, TimeLogged DATETIME NOT NULL DEFAULT(getdate()) ) |
图7∶执行SQL任务编辑器的参数映射页
在执行SQL任务中使用变量时,你必须给任务里SQL语句中的参数占位符映射变量。在本例中,我映射了四个系统变量给参数。图7显示了执行SQL任务编辑器的参数映射页。每一个映射都被定义为输入,参数名只是整数,很简单,从零开始。
定义好参数映射之后,你就可以定义SQL语句。我在执行SQL任务中使用了下面的语句:
INSERT INTO dbo.SSIS_events (EIGUID, PackageName, SourceName, EventInfo) VALUES (?,?,?,?) |
注意问号当做参数占位符的用法。问号的顺序与参数映射页定义的参数名相对应。例如:第二个变量是 PackageName 。该变量的参数名是1,实际上是第二个参数。这就表示第二个问号与这个变量对应,这样包名称会作为第二个值插入表中。如果你运行这个包, SSIS 将在下面的表中记录 OnInformation 事件的日志∶
EIGUID | PackageName | SourceName | EventInfo | TimeLogged |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | Validation phase is beginning. | 2007-12-26 16:53:37.700 |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | Prepare for Execute phase is beginning. | 2007-12-26 16:53:38.030 |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | Pre-Execute phase is beginning. | 2007-12-26 16:53:40.907 |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | Execute phase is beginning. | 2007-12-26 16:53:42.623 |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | The final commit for the data insertion has started. | 2007-12-26 16:53:43.047 |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | The final commit for the data insertion has ended. | 2007-12-26 16:53:43.110 |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | Post Execute phase is beginning. | 2007-12-26 16:53:43.200 |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | Cleanup phase is beginning. | 2007-12-26 16:53:43.297 |
7359F704-8267-4E6B-8785-1FA2ACB0A1E4 | Package | Data Flow Task | "component "OLE DB Destination" (90)" wrote 290 rows. | 2007-12-26 16:53:43.373 |
数据流任务会产生OnInformation事件。序列容器本身在容器内不执行SQL任务。当然,这只是一个例子——你可以记录任何想记录的信息,你也可以执行其他任何类型的行为。另外,你可以给其他可执行体创建事件处理程序。例如,你可能想让包执行失败时发送一份电子邮件,或者你可能只想对数据流任务记录错误事件,而不管其他任务。或你可以给数据流任务创建多个事件处理程序,而不管其他执行体。
这里要指出的是: SQL Server集成服务(SSIS)中的事件处理程序标签页非常的灵活,它支持根据你想监视的事件和你想执行的动作执行各种行为。事件处理程序标签页与控制流标签页,或者数据流标签页一样灵活,一样具有可扩展性——你只是需要知道怎样使用它。
翻译
TechTarget特邀编辑。2003年入软件行业,熟悉软件过程所有环节,对机构信息化的各方面有深入理解和实践经验。现就职于某互联网创业公司,目前关注互联网分布式系统架构和机器学习。喜欢传统文化社科哲学(尤喜《周易》、《老子》),喜健身喜抓举(具备抱人引体向上的能力),喜欢中国象棋(具备盲棋1对2的能力)。
相关推荐
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。
-
Notre Dame对云端SQL Server性能基准的探索实践
确立SQL Server的性能基准,对于云端迁移来说是至关重要的第一步,一位来自于University of Notre Dame 的DBA表示,他正在试图通过数据库监控软件,找出SQL server的性能基准。
-
横向扩展SQL Server应用程序:提高工作负载的选项
SQL Server管理员面临的最大挑战之一就是扩展数据库以适应更为繁重的数据处理工作负载。然而事情越发复杂的是,虽然Microsoft提供了许多不同的SQL Server可扩展性选项,但它们并不都适合于每种情况。
-
五大技巧构建首个SQL Server容器
容器的世界庞大而复杂,使用者可能会感到困扰,这里我们将列出一些示例,以便引导您顺利完成SQL Server容器的创建和管理。