忙了一段,終於有時間來完成這一系列了。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_Example\SendMail用來存放查詢語句和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數據庫。現在你的連接管理器有如下連接: