在ssis中也可以使用變數來當作查詢條件,但只限於sql server哦,其他的就沒有支援。

若你想要使用ssis,並對口的資料庫是sql server,就可以來看一下此篇文章

本次使用的範例資料庫為sql server的AdventureWorks資料庫

資料內容約如下,我假設想要在ssis開發階段,利用變數去測試資料回傳結果對不對的話,就可以使用這次的範例來做。

image

開啟visual studio(2005或2008都可以)

首先,先定義二個全域變數(若不知道如何建立變數的話,請先參考我blog的ssis分類中之前的文章),怎麼知道是全域變數呢?如果你的變數範圍名稱等同你的dtsx的檔名就是全域的

變數的定義

cid:準備當作sql 查詢參數用,並先給予預設值。

rs:當作輸出結果集的暫存變數。

image

接下來回到控制流程畫面中,拉出一個"資料流程工作"控制項

image

在"資料流程工作"上按滑鼠右鍵,選編輯

image

在"ole db來源",上點滑鼠右鍵選編輯(ole db連接管理員的部份,建議選擇使用共用資料來源,若不會設定的請參考SSIS-建立連線資料-PART1)

資料存取模式請選sql 命令,然後在sql 命令文字方字格中輸入下方sql 語法,

SELECT        *
FROM             Sales.Customer
WHERE         (CustomerID = ?)

 

"?"代表這是要接變數的查詢條件,且這種查詢條件只能放在where

(ps:我試過不能用在子查詢的where 條件中,他只能定義在主sql的where條件上)

image

接下來點選"參數"按鈕,會開啟如下面的視窗,請在parameter0的部份設成我們剛才定義的cid變數,若有多個,則會有parameterX個參數接口,請接照順序對應

image 

接下來,切換到資料行看是否有對應到欄位,這裡你可以選擇你想要輸出哪欄位,若有不要的欄位,在此也可以將勾勾拿掉,ok後按確定

image

接下來,在資料流程目的地,拉出一個"資料錄集目的地",為什麼要拉這個而不是拉"ole db目的地"呢?

因為我們這次只是教學,所以只是純檢視結果,若實際上是要寫到db的話,那就是拉ole db目的地或sql server 目的地(如果你的目的地是sql server的話)

拉出後,再把"ole db 來源"的綠線拉到"資料錄集目的地"上

(為什麼線上會有一個小圖呢?容我稍後說明)

image

接下來在"資料錄集目的地"控制項上按滑鼠右鍵選編輯,然後照下圖設定,我們在variablename中設定我們之前所設定的變數"rs"

image

切換到"輸入資料行"頁籤,這裡可以選擇你想要呈現的欄位為哪些

image

在此說明一下,使用"資料錄集目的地"執行完後,是沒有任何實際儲存的,他就像是一個runtime 時儲存記憶體中的資料,一結束後,就消失了

但我們可以利用即時檢視視窗來看這個暫存的資料體資料裡有什麼東西

在綠線上按滑鼠右鍵選編輯,選擇照下圖的方式設定

image 

你就可以在綠線上看到這個圖示了

image

好了,到此算是大功告成了,我們來看一下執行結果

先回顧一下,我們之前在變數cid有給預設值"2",按下鍵盤上的F5後,結果如下

image

在上圖中的黃色控制項,表示正在執行中,所以呈現黃色,在右圖就是經由 "ole db來源"的sql所下出來的資料集結果

若要讓ssis跑完的話,請按一下"卸離"按鈕,或按下image 來讓程式繼續執行

下圖為執行成功後的結果畫面

image

這樣看倌們了解了嗎?

你可以試試看把cid變數換成3的話,結果是不是會變呢?

歡迎留言討論哦!

每一篇教學文章都是花很多時間做的,也希望獲得些許的迴響,來共同學習..

arrow
arrow
    全站熱搜

    丫德 發表在 痞客邦 留言(5) 人氣()