为 SQL Server Integration Services 中的 "发送邮件" 任务创建动态主题或邮件

本文介绍了如何在运行时通过创建属性表达式来更新 SQL Server Integration Services (SSIS) 对象的属性。

原始产品版本:   SQL Server
原始 KB 数:   906547

简介

您可以使用 SQL Server 商业智能开发 Studio 创建 SSIS 包。 创建此包时,可以为 SSIS 包的属性创建一个表达式,以更新或在运行时填充该属性。 例如,如果 SSIS 包中包含 "发送邮件" 任务,则可以为 Subject 属性和属性创建表达式 MessageSource 。 您可以使用 Subject 属性表达式来动态更新电子邮件的主题。 您可以使用 MessageSource 属性表达式动态更新电子邮件中的变量,例如由行数转换填充的变量。

本文讨论如何为 "发送邮件" 任务创建动态主题或邮件。

详细信息

下面是发送邮件任务中 Subject 属性的示例属性表达式。

"Package>>> " + @[System::PackageName] +" was executed at>>> " + (DT_WSTR, 40) @[System::StartTime] + " by user>>> "
+ @[System::UserName] + " on Machine>>> " + @[System::MachineName]

如果使用此示例属性表达式,电子邮件的主题将动态更新。 主题将包含以下信息:

  • 文本信息在此示例中,电子邮件主题包括 Package>>> 文本信息。
  • 系统变量
    该电子邮件包含以下系统变量:
    • PackageName
      包名称。
    • StartTime
      执行包的时间。
    • UserName
      执行程序包的用户。
    • MachineName
      在其上执行程序包的计算机的名称。

您还可以在表达式中包含更多的信息,例如用户定义的变量。 例如,数据流任务可以在发送邮件任务之前包括行计数转换。 (行数转换用于计算行数。 ) 行计数转换将填充名为的用户定义的变量 @myrowcount 。 此变量将计数信息存储在数据流中。

若要指定仅当行数小于某个值时才发送电子邮件,请使用优先约束修改控制流。 为此,请按照下列步骤操作:

  1. 在 SQL Server 商业智能开发 Studio 中,右键单击 "数据流 任务",然后单击 " 添加优先顺序约束"。

  2. 双击您创建的优先约束。

  3. 在 "优先约束编辑器" 对话框中,单击 "计算操作 中的 表达式和约束"。

  4. 在 " 表达式 " 框中,键入表达式: @myrowcount < 2

  5. 在 " 优先约束编辑器 " 对话框中,单击 "确定"

如果在数据流中处理的行数少于两行,则会发送一封电子邮件。

此外,还可以使用 "发送邮件" 任务作为错误处理程序的一部分。 例如,您可能希望在 SSIS 包未执行时向管理员发送电子邮件。 为此,请为该包创建一个 OnError 事件处理程序,然后将 "发送邮件" 任务添加到事件处理程序中。 创建一个使用者属性表达式,用于捕获执行包的时间、容器的开始时间或相关系统变量中的事件处理程序的开始时间。 例如,创建一个类似于以下的表达式:

"Error in the task: " + @[System::SourceName] + "with the ID: " + @[System::SourceID]
+ " has failed at: " + (DT_WSTR, 20) @[System::ContainerStartTime] + "."

此示例表达式使用以下系统变量:

  • StartTime:执行包的时间。
  • ContainerStartTime:容器启动的时间。
  • EventHandlerStartTime:事件处理程序启动的时间。

参考

有关详细信息,请参阅 SQL Server 联机丛书 中的以下主题:

  • 在包中使用属性表达式
  • 如何:创建属性表达式
  • 高级集成服务表达式
  • 优先约束
  • 设置任务和容器的优先级约束
  • Integration Services 事件处理程序