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

本文演示如何在运行时通过创建属性表达式SQL Server SSIS (SSIS) 对象的 属性。

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

简介

可以使用 Business Intelligence Development Studio SQL Server 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
      执行程序包的计算机的名称。

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

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

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

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

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

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

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

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

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

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

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

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

参考

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

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