SQL Server BI Step by Step SSIS 5 - 通过Email发送查询结果
2010-01-01 15:41:35 来源:WEB开发网忙了一段,终于有时间来完成这一系列了。sql server 2008正式版已经发布了,接下来的系列都将基于sql server 2008+vs.net 2008开发。
引言
在一个B2B项目中遇到这样的一个情况,每天老板都想看到所有的新的订单信息,而这个老板很懒,不想登录系统后台,而是想通过查看邮件的方式。当然实现方式很多,这里我们介绍一个怎么使用SSIS包来实现这样的一个功能。使用SQL XML Query查询出XML结果数据,然后使用Xsl模板将xml数据转换成html,再将html内容发送邮件。
创建SSIS包
1.和vs.net 20005中一样的方式,创建一个Integration Service项目,并且包的名称修改为 SendMailPackage
2.在你的本地硬盘上新建一个目录,比如F:SSIS_ExampleSendMail 用来存放查询语句和Xsl文 件.
3.在刚才的目录下新建一个QueryOrder.sql文件,填充如下内容,在连接管理器中新建一个文件连接 ,选择新建的sql文件:
隐藏行号 复制代码 ? QueryOrder.sql
/*
实际使用时将@v_CurrentDate换成当时日期
*/
declare @v_CurrentDate datetime
set @v_CurrentDate = '2003-07-17'
/*set @v_CurrentDate = GETDATE()*/
if exists (select 1
from Sales.SalesOrderHeader
where OrderDate = @v_CurrentDate)
begin
select top 10 oh.OrderDate,
(select round(sum(TotalDue), 2)
from Sales.SalesOrderHeader
where OrderDate = @v_CurrentDate) as DayTotal,
p.ProductID, p.Name,
round(sum(oh.TotalDue), 2) as ProductSubtotal
from AdventureWorks.Sales.SalesOrderHeader oh
join AdventureWorks.Sales.SalesOrderDetail od
on od.SalesOrderID = oh.SalesOrderId
join AdventureWorks.Production.Product p
on p.ProductID = od.ProductId
where oh.OrderDate = @v_CurrentDate
group
by oh.OrderDate, p.ProductID, p.Name
order
by 5 desc, p.ProductID asc
for xml auto, elements, type, root('Order')
end
else select cast('<NoRecords>No sales records available for this date.</NoRecords>' as xml)
注: 在这里我们使用一个固定的日期,实际中你可以使用系统方法GETDATE()或者DATEDIFF()来查 询你需要的日期。
4.同样在目录下面新建一个Orders.xsl文件,由于内容较多,请直接下载附件中文件,这里也不在详 细介绍xsl的具体内容。 同样也新建一个文件连接。
5.在目录下新建一个Orders.htm文件,用来存放生成的html内容,同时也新建一个文件连接。
6.新建一个Ado.net 连接你的AdventureWorks数据库。现在你的连接管理器有如下连接:
更多精彩
赞助商链接