公告版位
哈囉,丫德我會常常更新一些工作上的心情記事及資訊科技新知與大家分享...

有位網路上的朋友,在我的留言版留下了訊息,想要了解用ssis怎麼判斷資料的內容,並寫到一個text檔中,且還可以寫到自己指定的目錄中!

嗯..我稍微想了一下,大致上可以這樣做,如果該位網路上的朋友有看到本篇的話,看是否這個範例可否解答你的問題,看完後若有問題,可以留言來討論囉!

本範例所使用的工具為
sql server 2008中的ssis,大部份與sql server 2005中的ssis都是一樣

另外我假設看這篇文章的人,已經知道怎麼連線資料庫了,所以這一段我就跳過不說了,若有新的朋友不知道要怎麼連的話,請參考我之前的文章哦!

範例說明:
我要做的範例為將送貨城市為高雄市的找出來,之後寫到文字檔

首先看一下sql指令的結果(以下的資料結果都是虛擬的,不是真實的,參考就好)

image
接下來回到ssis的開發介面,拉出一個”資料流程工作”

image

在”資料流程工作”按滑鼠右鍵,選編輯
接下來拉出一個oledb 資料來源

image

在拉出來的”oledb來源”按制項上按滑鼠右鍵,選編輯

image

在資料存取模式的地方選擇”sql 命令”,將剛才所輸入的sql指令貼上,並且預覽一下,看是否有看到資料

image 




ok的話,”點選關閉”,點選”確定”,接下來,從資料流程目的地,拉出一個”一般檔案目的地”

image 

接下來,把資料來源目的地的綠線拉到”一般檔案目的地”上,使其連接,如下圖

image

一樣在拉出來的”一般檔案目的地”,按滑鼠右鍵選編輯
在視窗中,點選”新增”

image

這裡我選擇”使用分隔符號”

image

按下”確定”之後,將會再開另一個視窗,我們須先指定這個text檔案是要放在哪,所以我們點選瀏覽(ps:這裡也可以是網芳的路徑哦,ex  //jay/doc/test.txt)

image

我自己已經有在c:下放了一個空白的test.txt檔了,所以直接選它

image

若你想要當每次匯到txt檔時的第一個為標題,則請記得要勾選”第一個資料列的資料行名稱”

image

接下來切換到”資料行”這個頁籤,可以看到預覽的畫面中標題都有出來了,因為我們有把綠色的線相連起來,所以他會自動去抓來源的欄位名稱,當中的內容都是空白的,若該txt檔中有資料的話,也會顯示在這個預覽畫面中

image

在”進階”這個頁籤中,你可以自己決定要顯示那些欄位,或不要那些欄位,也可以自行新增或刪除欄位哦

image

設定好後按下”確定”

接下來會回到檔案目的地編輯器的視窗,但會發現為什麼”還是無法按下確定呢?”,因為我們還必須要按下”對應”這個頁籤,之後”確定”這個按鈕才會是可以按的哦!

image

如下圖

image

按下確定後,回到主畫面,確定這二個控制項中都沒有出現image ,不然一定是你某個地方設錯了哦,這樣是不行執行的,若出現如下圖,則表示都是設定成功的!

image

接下來,我們來執行看看吧,按下鍵盤的F5,或按下工具列上的image 來執行

以下為執行結果

image

接下來我我們按下工具列上的image 這個按鈕或按”shift+F5”來停止debug模式!

我們開啟text.txt這個檔案來看看吧!

image

ok,範例到此結束囉!

另外給個建議,盡量可以在資料中完成的就盡量在sql中完成,不然在ssis這也是花一些工夫來用控制項解決,當然不一定說不好啦,但這樣至少可以讓自己在使用ssis時花較少的時間除錯囉!


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


留言列表 (7)

發表留言
  • 妮
  • 感謝您用心幫我回覆問題(ssis怎麼判斷資料的內容,並寫到一個text檔中),已你舉的例子,若要限定送貨城市=高雄市時才產生文自檔,如果不符合條件則不產生文字檔,似乎不能達到,抱歉再麻煩您幫我解答,感謝
  • 你好,請問就你的條件"限定送貨城市=高雄市時才產生文自檔",這個部份你可以用sql先行篩選嗎?如果可以的話,當然照我這個範例來做即可,但若是你是需要每次撈很多資料,然後再根據不同資料來判斷是否要產生文字檔的話,當然那也是可以,只是中間再加上一個判斷方式即可,但我要先確定你的篩選方式是要在sql中就解決,還是得要到ssis中才要篩選?

    丫德 於 2009/06/23 08:10 回覆

  • 妮
  • 抱歉可能我說的不清楚,如同你說的要"根據不同資料來判斷是否要產生文字檔",麻煩你了
  • 哈囉!你好!
    你可以參考我這篇文章,應該是你要的
    http://yangxinde.pixnet.net/blog/post/23978653

    丫德 於 2009/06/24 22:44 回覆

  • Vincent
  • 你好:類似上面問題,但是我是要將 TXT 檔轉到 Sql 的資庫,我的資檔是固定長度的 TXT 檔,如何能夠轉換成 Sql 資料庫?

    檔案就像問卷調查那種固定長度的 Coding 用 UTF-8 格式儲存,以前都是用 Vb 的 mid 指令來切割檔案,現在老闆要求用 sql 來處理,所以要轉成,sql 的資料庫檔,謝謝!!
  • 你好!
    不太了你說的資檔是固定長度的 TXT 檔
    可否有個範例文字說明一下
    你是指行與行之間是用空白的方法做區隔?

    丫德 於 2011/04/14 07:07 回覆

  • 訪客
  • 你好:假設一份問卷有1000份,那麼我的資料就1000份(0001~1000),每份問卷有20個問題,那麼每筆資料就有 4+20 個欄位,前四碼是(ID)後20碼會對應到每個問題的答案,我的資料檔是類似這種固定長度的TXT檔,以前都用 DOS 處理的,現在已轉成Windows 的 TXT 檔 (UTF-8),我可以將資料滙到 Sql ,但是叫出來都是固定長度的 Record, 我的意思是否有辦法將固定長度的檔案切割開來,成為一個 Field 一個 Field 的 Sql 資料庫 的資料,謝謝!!
  • Vincent
  • 你好:給你一個我的檔案的樣本:

    00012738091128 我的檔案就長這個樣子,固定長度的 TXT 檔, 前四碼是 ID
    00023302371236 可當 Key 使, 後面十欄是對應問卷的答案,我的意思是,我要
    00032322302927 把檔案分成(ID 1-4) 及 N01~N10 十個欄位,目前 Sql 的滙
    00042339320903 入精靈(我會的部份) 只能作到, 整個檔案滙進 Sql 資料庫
    00052613120915 但是無法分割成我要的那個樣子,如 Y德 兄有好的方法,請教, 謝謝!!
    00061124130839
    00070817281405
    00083405303835
    00093715182007
    00102623210633
  • Vincent
  • 樣本如下:

    00012738091128
    00023302371236
    00032322302927
    00042339320903
    00052613120915
    00061124130839
    00070817281405
    00083405303835
    00093715182007
    00102623210633
  • vincent你好
    你的問題,我有實作了一篇文章,你可以看看是否是你要的結果
    老王賣瓜一下,我的另一個部落格
    http://www.dotblogs.com.tw/yangxinde/archive/2011/04/14/22727.aspx

    丫德 於 2011/04/14 22:19 回覆

  • Vincent
  • Y德兄:應該就如你所示範的,非常感謝你,不然我的Sql實作一直不能進行,感激你啊!!
  • 不客氣,有幫到您就好

    丫德 於 2011/04/15 06:35 回覆