最近在为公司财务开发一个邮件通知时遇到了一个技术问题。原来我设计SSIS的是每天将ERP系统支付数据导出到财务支付平台后 Email 通知财务,然后财务到支付平台上进行支付操作。由于那个时候开发时间很紧张,对于不懂 SSIS 的我,当时设计是不管导了多少数据,只要执行完就立即 Email 通知财务。虽然这是我们 IT 和财务达成的一致,但某一天财务忽略了这个Email ,于是就开始给 IT 提意见了。他们希望仅在有支付数据的时候才收到邮件。

  其实我当时这样设计还有另一层目的,就是避免 SSIS 执行过程中失败。由于开发中心和执行中心分别是独立开来的,所以 SSIS 一旦有任何错误,最后一步发送 Email 都会失败。这样我就能够知道 SSIS 没有执行成功,从而去系统中寻找错误原因。目前我的开发技术还比较落后,我非常希望一旦 SSIS 执行错误可以回滚, 但在 SQL 中可以这么做, SSIS 中我就不清楚如何去实现了。所以如果读到这篇文章的朋友可以帮助我,我将非常感谢。

  我在考虑如何实现将SQL查询到的数据显示在 Email 中的过程中查阅了许多技术贴,这些技术贴对我有一定的帮助,但由于没有记录相关的链接和作者,我就在此以“各位技术达人”的统称对你们表示感谢。由于工作中并不常常使用 SSIS , 即使使用,用到的功能也非常局限,所以我目前对于 SSIS 并不熟悉。写这篇文章希望可以对于当初向我一样对我文章标题所指出问题迷惑的人有所帮助,我尽量将文章写成最简单的,当你搜索到的时候看一看就懂,然后就可以顺利你接下来的工作,我就会感到非常高兴。写的不当之处也非常欢迎各位朋友批评,我将及时修正。

  写了一堆废话,我们言归正传吧!

需求:

  在 SQL Server 有一张的基本表 , SSIS 运行时坚持表中是否存在数据。如果存在数据,则将数据的记录数发送邮件。

实现:

  首先,我们打开 Visual Studio 2005 新建一个 SSIS 项目,然后定义一个自定义变量叫做 varA 。这个变量将用来统计表中的记录数,然后将记录数显示在邮件正文中发送出去。(有关如何自定义变量,在此就不再多说,搜索一下,有许多这方面的帖子)

  然后我们先来看一下这个 SSIS 的总体设计图。

在 Execute SQL Task 对象中,我们通过 SQL 的 count(*) 来查询表中的记录数(count(列名)会更快一些),然后将这个记录数赋值给变量 varA 。如果 varA > 0 ,我们执行 Send1发送邮件;如果 varA = 0 ,我们执行 Send2 发送邮件。我们通过判断表中是否有记录条数从而发送不同的 Email 。

  下面我们逐一看一下每个对象的设计。

  首先,我们看一下 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 。

  总体上,就是这样,在搜索学习了许多帖子的知识,再加上自己的多次努力后,还算是比较成功的实现了这一个想法。下周回去就改造原有的功能。不知道这篇文章的知识分享是否给你带来了一点点小收获了呢?

  欢迎大家指点批评。

SSIS 实例——将SQL获取的信息传递到Email中的更多相关文章

  1. 将SQL获取的信息传递到Email中

    将SQL获取的信息传递到Email中 最近在为公司财务开发一个邮件通知时遇到了一个技术问题.原来我设计SSIS的是每天将ERP系统支付数据导出到财务支付平台后 Email 通知财务,然后财务到支付平台 ...

  2. sql 获取批处理信息的脚本(优化器在处理批处理时所发生的优化器事件)

    --获取批处理信息的脚本(优化器在处理批处理时所发生的优化器事件) SET NOCOUNT ON; DBCC FREEPROCCACHE; --清空过程缓存 GO --使用tempdb..Optsta ...

  3. 经历:sybase的sql查询,当传递的参数中包含全角空格(\u00a0),查询慢

    今天,我遇到了一个sybase数据库查询的问题.一句简单的sql,但是不知道为什么查询不出来,导致生产生产服务器频频挂掉.吓得我的小心脏砰砰啊. select DISTINCT A.FCIL_CDE ...

  4. 获取登陆信息 在created()方法中

    // 获取登录信息 public async InitUser() { await sj.globalVar.Init(true); this.params.unitId = sj.globalVar ...

  5. SSIS 实例 从Ftp获取多个文件并对数据库进行增量更新。

    整个流程 Step 1 放置一个FTP Task 将远程文件复制到本地 建立FTP链接管理器后 Is LocalPatchVariable 设置为Ture 并创建一个变量设置本地路径 Operatio ...

  6. SSIS 部署到SQL Job

    微软 BI 系列随笔 - SSIS 基础 - 部署SQL Job 简介 在之前博客中,讲述了如何实现SSIS的项目部署以及利用SSIS的参数与环境加速部署,参见 微软 BI 系列随笔 - SSIS 基 ...

  7. 【转】windows c++获取文件信息——_stat函数的使用

    _stat函数的功能 _stat函数用来获取指定路径的文件或者文件夹的信息. 函数声明 int _stat( const char *path, struct _stat *buffer ); 参数: ...

  8. html5获取地理位置信息API

    html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...

  9. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

    CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...

随机推荐

  1. 关于bug分析与异常处理的一些思考

    前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...

  2. OAuth认证原理及HTTP下的密码安全传输

    很多人都会问这样一个问题,我们在登录的时候,密码会不会泄露?随便进一个网站,登录时抓包分析,可以看到自己的密码都是明文传输的,在如此复杂的web环境下,我们没有百分的把握保证信息在传输过程中不被截获, ...

  3. nodejs处理url工具

    url模块提供3个方法:parse,format,resolve 1.parse 要先引入url模块 >url.parse('http://www.cnblogs.com/cate/108703 ...

  4. 【WPF】闲着没事,写了个支持数据列表分页的帮助类

    支持分页的MVVM组件大家可以网上找,老周这个类只是没事写来娱乐一下的,主要是功能简单,轻量级,至少它满足了我的需求,也许还有未知的 bug . 这个类支持对数据列表进行分页处理,原理是利用 Skip ...

  5. 【.net 深呼吸】自定义特性(Attribute)的实现与检索方法

    在.net的各个语言中,尤其是VB.NET和C#,都有特性这一东东,具体的概念,大家可以网上查,这里老周说一个非标准的概念——特性者,就是对象的附加数据.对象自然可以是类型.类型成员,以及程序集. 说 ...

  6. Android 开发环境在 Windows7 下的部署安装

    Android SDK Android SDK 为 Android 应用的开发.测试和调试提了必要的API库和开发工具. ADT Bundle 下载 如果你是一个android 开发新手,推荐你下载使 ...

  7. objC与js通信实现--WebViewJavascriptBridge

    场景   在移动端开发中,最为流行的开发模式就是hybmid开发,在这种native和h5的杂糅下,既能在某些需求中保证足够的性能,也可以在某些列表详情的需求下采用h5的样式控制来丰富内容.但是在大型 ...

  8. RMAN异机恢复快速参考

    应用场景:服务器A为正常运行的生产环境,需要在服务器B上部署一套相同环境做测试. 数据库环境:RHEL6.4 + Oracle 11.2.0.4.7 一. 服务器A备份数据库 1.1 在线备份(数据库 ...

  9. 设置eclipse中自动添加get,set的注释为字段属性的注释

    一:说明 首先具体来看一下是什么效果,上图可能会更清楚一点 就是在get/set中自动加上属性的注释,那我们要怎么配置呢? 二:配置 2.1:下载附件 下载附件 2.2:替换class 原生的ecli ...

  10. 『.NET Core CLI工具文档』(十)dotnet-build

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-build 翻译:dotnet-build 名称 dotnet-build -- 生成项目和所有的依赖 概 ...