最近在为公司财务开发一个邮件通知时遇到了一个技术问题。原来我设计SSIS的是天天将ERP系统支付数据导出到财务支付平台后 Email 通知财务,而后财务到支付平台上进行支付操做。因为那个时候开发时间很紧张,对于不懂 SSIS 的我,当时设计是无论导了多少数据,只要执行完就当即 Email 通知财务。虽然这是咱们 IT 和财务达成的一致,但某一天财务忽略了这个Email ,因而就开始给 IT 提意见了。他们但愿仅在有支付数据的时候才收到邮件。函数
其实我当时这样设计还有另外一层目的,就是避免 SSIS 执行过程当中失败。因为开发中心和执行中心分别是独立开来的,因此 SSIS 一旦有任何错误,最后一步发送 Email 都会失败。这样我就可以知道 SSIS 没有执行成功,从而去系统中寻找错误缘由。目前个人开发技术还比较落后,我很是但愿一旦 SSIS 执行错误能够回滚, 但在 SQL 中能够这么作, SSIS 中我就不清楚如何去实现了。因此若是读到这篇文章的朋友能够帮助我,我将很是感谢。学习
我在考虑如何实现将SQL查询到的数据显示在 Email 中的过程当中查阅了许多技术贴,这些技术贴对我有必定的帮助,但因为没有记录相关的连接和做者,我就在此以“各位技术达人”的统称对大家表示感谢。因为工做中并不经常使用 SSIS , 即便使用,用到的功能也很是局限,因此我目前对于 SSIS 并不熟悉。写这篇文章但愿能够对于当初向我同样对我文章标题所指出问题迷惑的人有所帮助,我尽可能将文章写成最简单的,当你搜索到的时候看一看就懂,而后就能够顺利你接下来的工做,我就会感到很是高兴。写的不当之处也很是欢迎各位朋友批评,我将及时修正。lua
写了一堆废话,咱们言归正传吧!设计
需求:对象
在 SQL Server 有一张的基本表 , SSIS 运行时坚持表中是否存在数据。若是存在数据,则将数据的记录数发送邮件。blog
实现:开发
首先,咱们打开 Visual Studio 2005 新建一个 SSIS 项目,而后定义一个自定义变量叫作 varA 。这个变量将用来统计表中的记录数,而后将记录数显示在邮件正文中发送出去。(有关如何自定义变量,在此就再也不多说,搜索一下,有许多这方面的帖子)字符串
而后咱们先来看一下这个 SSIS 的整体设计图。input
在 Execute SQL Task 对象中,咱们经过 SQL 的 count(*) 来查询表中的记录数(count(列名)会更快一些),而后将这个记录数赋值给变量 varA 。若是 varA > 0 ,咱们执行 Send1发送邮件;若是 varA = 0 ,咱们执行 Send2 发送邮件。咱们经过判断表中是否有记录条数从而发送不一样的 Email 。io
下面咱们逐一看一下每一个对象的设计。
首先,咱们看一下 Execute SQL Task 这个对象是如何经过 SQL 给变量赋值的。因为咱们使用的是 count 函数,仅返回一个数值,因此在Result Set(结果集)中咱们选择 Single row。而后咱们在 SQLSourceType 中选择 Direct input, 表示咱们经过直接在 SQL Statement 属性中写 SQL 语句。
咱们写好的 SQL 中,必定要注意一点就是为返回的数值赋别名,由于咱们后边的变量须要经过这个别名才可以被赋值。如图,点击 SQL Statement ... 后,咱们将返回结果叫作 result 列。
打开 Execute SQL Task 对象中的 Result Set , 咱们新建一个返回值名字如图。Result Name 就是咱们刚才的别名,Variable Name 即选择咱们的自定义变量 varA 。
固然,Execute SQL Task 若是须要执行 SQL Server 中的 SQL ,还需指定配置相关的数据源。这一部分我已经配置,由于本文的重点在如何传递变量值,因此这部份内容就再也不讲了。
下面咱们看一下如何配置 Send1 对象。
咱们须要在 Send1 对象中配置以下图所示的发件人邮箱、收件人邮箱、邮件标题和优先级。另外,在此以前还须要配置一个发送邮件的链接,在此也再也不讲了。
但如何将 varA 的值传递到邮件正文中呢?上一个图里面 MessageSource 其实就是邮件正文的内容,但咱们如今想经过变量的方式向其中传递从而更改正文。打开 Expression 属性, 点击"..."。
咱们须要配置的信息以下图所示。首先咱们将变量 varA 传递到正文中, 写法为 @[User::varA] ,由于这个变量是整型变量类型,但邮件正文要求所有为字符串型类型,因此咱们须要将整型变量类型转换为字符串类型。经过 (DT_WSTR, 32) @[User:: varA] 就将 varA转换为字符串了。咱们再在变量先后分别加上须要加上的内容就OK了。注意文字部分须要经过双引号括起来,链接字符串用"+"号。点击 Evaluate Expression 按钮,咱们能够预览表达式结果。
Send2 的配置我就很少说了, 配置方法和 Send1 大同小异。下面,咱们回到整体的设计图中,来看一看如何实现 IF 判断的逻辑,根据变量的不一样值发送不一样的 Email 。
咱们双击链接 Execute SQL Task 对象和 Send1 对象之间的链接箭头,而后作以下图所示的配置。当变量 varA 大于 0, 也就是表中有记录的时候,咱们执行 Send1。相似地,咱们也能够配置当表中没有数据记录的时候,执行 Send2 。
整体上,就是这样,在搜索学习了许多帖子的知识,再加上本身的屡次努力后,还算是比较成功的实现了这一个想法。下周回去就改造原有的功能。不知道这篇文章的知识分享是否给你带来了一点点小收获了呢?
欢迎你们指点批评。