SSIS中使用事件处理程序的五个步骤(下)

日期: 2009-07-01 作者:Robert Sheldon翻译:冯昀晖 来源:TechTarget中国 英文

在本文中,我选择 OnInformation 事件为例。也就是说,我给序列容器执行体创建了一个OnInformation 事件处理程序。这样一来,每当容器内任何任务或容器本身产生 OnInformation 事件时, OnInformation 事件处理程序就会执行其已定义的任何行为。   第4步∶开发工作流   选择可执行体和事件只是你进行创建事件处理程序的第一步。

事件处理程序要有实际意义,必须执行一些实际行为。   定义工作流行为的方法跟定义控制流的方法一样。如果你回到图3,你可以看到事件处理程序设计界面有一个链接。一旦你选择了执行体的和事件,你应该点击该链接激活设计界面,然后创建初始事件……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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 事件的日志∶

EIGUIDPackageNameSourceNameEventInfoTimeLogged
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow TaskValidation phase is beginning.2007-12-26 16:53:37.700
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow TaskPrepare for Execute phase is beginning.2007-12-26 16:53:38.030
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow TaskPre-Execute phase is beginning.2007-12-26 16:53:40.907
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow TaskExecute phase is beginning.2007-12-26 16:53:42.623
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow TaskThe final commit for the data insertion has started.2007-12-26 16:53:43.047
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow TaskThe final commit for the data insertion has ended. 2007-12-26 16:53:43.110
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow TaskPost Execute phase is beginning.2007-12-26 16:53:43.200
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow TaskCleanup phase is beginning.2007-12-26 16:53:43.297
7359F704-8267-4E6B-8785-1FA2ACB0A1E4PackageData Flow Task"component "OLE DB Destination" (90)" wrote 290 rows. 2007-12-26 16:53:43.373

  数据流任务会产生OnInformation事件。序列容器本身在容器内不执行SQL任务。当然,这只是一个例子——你可以记录任何想记录的信息,你也可以执行其他任何类型的行为。另外,你可以给其他可执行体创建事件处理程序。例如,你可能想让包执行失败时发送一份电子邮件,或者你可能只想对数据流任务记录错误事件,而不管其他任务。或你可以给数据流任务创建多个事件处理程序,而不管其他执行体。

  这里要指出的是: SQL Server集成服务(SSIS)中的事件处理程序标签页非常的灵活,它支持根据你想监视的事件和你想执行的动作执行各种行为。事件处理程序标签页与控制流标签页,或者数据流标签页一样灵活,一样具有可扩展性——你只是需要知道怎样使用它。

相关推荐