有位網路上的朋友,在我的留言版留下了訊息,想要了解用ssis怎麼判斷資料的內容,並寫到一個text檔中,且還可以寫到自己指定的目錄中!
嗯..我稍微想了一下,大致上可以這樣做,如果該位網路上的朋友有看到本篇的話,看是否這個範例可否解答你的問題,看完後若有問題,可以留言來討論囉!
本範例所使用的工具為
sql server 2008中的ssis,大部份與sql server 2005中的ssis都是一樣
另外我假設看這篇文章的人,已經知道怎麼連線資料庫了,所以這一段我就跳過不說了,若有新的朋友不知道要怎麼連的話,請參考我之前的文章哦!
範例說明:
我要做的範例為將送貨城市為高雄市的找出來,之後寫到文字檔
首先看一下sql指令的結果(以下的資料結果都是虛擬的,不是真實的,參考就好)
在”資料流程工作”按滑鼠右鍵,選編輯
接下來拉出一個oledb 資料來源
在拉出來的”oledb來源”按制項上按滑鼠右鍵,選編輯
在資料存取模式的地方選擇”sql 命令”,將剛才所輸入的sql指令貼上,並且預覽一下,看是否有看到資料
ok的話,”點選關閉”,點選”確定”,接下來,從資料流程目的地,拉出一個”一般檔案目的地”
接下來,把資料來源目的地的綠線拉到”一般檔案目的地”上,使其連接,如下圖
一樣在拉出來的”一般檔案目的地”,按滑鼠右鍵選編輯
在視窗中,點選”新增”
這裡我選擇”使用分隔符號”
按下”確定”之後,將會再開另一個視窗,我們須先指定這個text檔案是要放在哪,所以我們點選瀏覽(ps:這裡也可以是網芳的路徑哦,ex //jay/doc/test.txt)
我自己已經有在c:下放了一個空白的test.txt檔了,所以直接選它
若你想要當每次匯到txt檔時的第一個為標題,則請記得要勾選”第一個資料列的資料行名稱”
接下來切換到”資料行”這個頁籤,可以看到預覽的畫面中標題都有出來了,因為我們有把綠色的線相連起來,所以他會自動去抓來源的欄位名稱,當中的內容都是空白的,若該txt檔中有資料的話,也會顯示在這個預覽畫面中
在”進階”這個頁籤中,你可以自己決定要顯示那些欄位,或不要那些欄位,也可以自行新增或刪除欄位哦
設定好後按下”確定”
接下來會回到檔案目的地編輯器的視窗,但會發現為什麼”還是無法按下確定呢?”,因為我們還必須要按下”對應”這個頁籤,之後”確定”這個按鈕才會是可以按的哦!
如下圖
按下確定後,回到主畫面,確定這二個控制項中都沒有出現 ,不然一定是你某個地方設錯了哦,這樣是不行執行的,若出現如下圖,則表示都是設定成功的!
接下來,我們來執行看看吧,按下鍵盤的F5,或按下工具列上的 來執行
以下為執行結果
接下來我我們按下工具列上的 這個按鈕或按”shift+F5”來停止debug模式!
我們開啟text.txt這個檔案來看看吧!
ok,範例到此結束囉!
另外給個建議,盡量可以在資料中完成的就盡量在sql中完成,不然在ssis這也是花一些工夫來用控制項解決,當然不一定說不好啦,但這樣至少可以讓自己在使用ssis時花較少的時間除錯囉!

感謝您用心幫我回覆問題(ssis怎麼判斷資料的內容,並寫到一個text檔中),已你舉的例子,若要限定送貨城市=高雄市時才產生文自檔,如果不符合條件則不產生文字檔,似乎不能達到,抱歉再麻煩您幫我解答,感謝
你好,請問就你的條件"限定送貨城市=高雄市時才產生文自檔",這個部份你可以用sql先行篩選嗎?如果可以的話,當然照我這個範例來做即可,但若是你是需要每次撈很多資料,然後再根據不同資料來判斷是否要產生文字檔的話,當然那也是可以,只是中間再加上一個判斷方式即可,但我要先確定你的篩選方式是要在sql中就解決,還是得要到ssis中才要篩選?
抱歉可能我說的不清楚,如同你說的要"根據不同資料來判斷是否要產生文字檔",麻煩你了
哈囉!你好! 你可以參考我這篇文章,應該是你要的 http://yangxinde.pixnet.net/blog/post/23978653
你好:類似上面問題,但是我是要將 TXT 檔轉到 Sql 的資庫,我的資檔是固定長度的 TXT 檔,如何能夠轉換成 Sql 資料庫? 檔案就像問卷調查那種固定長度的 Coding 用 UTF-8 格式儲存,以前都是用 Vb 的 mid 指令來切割檔案,現在老闆要求用 sql 來處理,所以要轉成,sql 的資料庫檔,謝謝!!
你好! 不太了你說的資檔是固定長度的 TXT 檔 可否有個範例文字說明一下 你是指行與行之間是用空白的方法做區隔?
你好:假設一份問卷有1000份,那麼我的資料就1000份(0001~1000),每份問卷有20個問題,那麼每筆資料就有 4+20 個欄位,前四碼是(ID)後20碼會對應到每個問題的答案,我的資料檔是類似這種固定長度的TXT檔,以前都用 DOS 處理的,現在已轉成Windows 的 TXT 檔 (UTF-8),我可以將資料滙到 Sql ,但是叫出來都是固定長度的 Record, 我的意思是否有辦法將固定長度的檔案切割開來,成為一個 Field 一個 Field 的 Sql 資料庫 的資料,謝謝!!
你好:給你一個我的檔案的樣本: 00012738091128 我的檔案就長這個樣子,固定長度的 TXT 檔, 前四碼是 ID 00023302371236 可當 Key 使, 後面十欄是對應問卷的答案,我的意思是,我要 00032322302927 把檔案分成(ID 1-4) 及 N01~N10 十個欄位,目前 Sql 的滙 00042339320903 入精靈(我會的部份) 只能作到, 整個檔案滙進 Sql 資料庫 00052613120915 但是無法分割成我要的那個樣子,如 Y德 兄有好的方法,請教, 謝謝!! 00061124130839 00070817281405 00083405303835 00093715182007 00102623210633
樣本如下: 00012738091128 00023302371236 00032322302927 00042339320903 00052613120915 00061124130839 00070817281405 00083405303835 00093715182007 00102623210633
vincent你好 你的問題,我有實作了一篇文章,你可以看看是否是你要的結果 老王賣瓜一下,我的另一個部落格 http://www.dotblogs.com.tw/yangxinde/archive/2011/04/14/22727.aspx
Y德兄:應該就如你所示範的,非常感謝你,不然我的Sql實作一直不能進行,感激你啊!!
不客氣,有幫到您就好
你好, 請問用固定寬度,可以讓每行資料做換行嗎? 或是用不齊右,最後一行不使用新行字元? 謝謝
你好 不太懂你的意思,不知道你的資料是長怎樣
ㄚ德你好, 我是從db把select的資料轉出到TXT檔,不過轉出格式用固定寬度,轉出後的每一行資料都會串連在同一行。 例如: a1234567a2345678a3456789 轉出格式用不齊右,每一行會因設定的長度換行,資料列出最後一筆資料後,不要有新行。 例如: a1234567 a2345678 a3456789 產生的新行
你用固定寬度的話,select出來只有一筆?多筆的話放到text應該也是會有換行符號,但你為什麼不能用,分隔?有特殊原因?
select出來是多筆,但不知道為什麼固定寬度就是不會換行。不知你是否知道問題點在那? 因需求要求不能用,分隔。
可以有範例看你是怎麼select的嗎?
你好, 連結是我寫的sql,麻煩你了,謝謝 https://drive.google.com/open?id=0B-1wWN40kmKXMmJLSlItVFNQVm8
看你了一下你的sql, 可否再精簡一下,給個執行結果範例畫面,不用真實資料,請用測試範例 或者你可以看一下另一位作者的文章 這裡也解釋的蠻清楚的 http://sharedderrick.blogspot.tw/2011/07/ssisragged1.html
ㄚ德兄, 以下是執行結果範例,應該長度15就要換行,麻煩你指點,謝謝 TEST1TEST2TEST3TEST1TEST2TEST3TEST1TEST2TEST3TEST1TEST2TEST3
請問你之前的那個sql查詢出來的結果就一行? 還是會是多行 TEST1TEST2TEST3TEST1TEST2TEST3TEST1TEST2TEST3TEST1TEST2TEST3 TEST1TEST2TEST3TEST1TEST2TEST3TEST1TEST2TEST3TEST1TEST2TEST3 TEST1TEST2TEST3TEST1TEST2TEST3TEST1TEST2TEST3TEST1TEST2TEST3 類似這樣?
查詢出來會多筆記錄,但匯到txt就只有一行。 以我提供的結果範例,在ssms select 會是4筆記錄,匯到txt檔就只有一行
ok我確認一下 假設你select 出來的結果是這樣 TEST1TEST2TEST3 TEST1TEST2TEST3 TEST1TEST2TEST3 TEST1TEST2TEST3 但你用ssis的固定寬度方式匯到txt之後卻變成只有一行對吧? 我有空再試作看看 哈囉!我有寫成一篇文章了,你再看看是不是你要的 http://yangxinde.pixnet.net/blog/post/47405874-ssis-%E5%8C%AF%E5%87%BA%E8%B3%87%E6%96%99%E8%A1%A8%E5%88%B0%E6%96%87%E5%AD%97%E6%AA%94%E4%BD%BF%E7%94%A8%E5%9B%BA%E5%AE%9A%E5%AF%AC%E5%BA%A6%E7%9A%84%E6%80%AA%E8%A7%A3
ㄚ德兄 謝謝你的幫忙。
ok,有解決你的問題就好