SSIS 實例——將SQL獲取的信息傳遞到Email中

  最近在爲公司財務開發一個郵件通知時遇到了一個技術問題。原來我設計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 。

 

 

  整體上,就是這樣,在搜索學習了許多帖子的知識,再加上本身的屢次努力後,還算是比較成功的實現了這一個想法。下週回去就改造原有的功能。不知道這篇文章的知識分享是否給你帶來了一點點小收穫了呢?

  歡迎你們指點批評。

相關文章
相關標籤/搜索