在 SQL Server Integration Services 中为“发送邮件”任务创建动态主题或邮件

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

原始产品版本:SQL Server
原始 KB 编号: 906547

简介

可以使用 SQL Server Business Intelligence Development 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 Business Intelligence Development 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:事件处理程序启动的时间。

References

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

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