iT邦幫忙

0

SQL 代理程式 輸出檔案要轉成EXCEL 不要在同一欄

在用Microsoft SQL的「SQL Server 代理程式」的作業,執行每週定期要做的報表。
結果需要轉成Excel格式,不過不論我將「輸出檔案」存成「.CSV」或是「.XLS」,結果都會全部擠在同一個欄位。
(我有試過使用「資料剖析」做欄位的分割,但是因為語法執行出來的資料,會有空格之類的問題,所以沒辦法剖析成需要的結果。)
不知道有沒有什麼方法,可以在執行後,就可以像是一般「執行」後的結果,各欄位都分好好的嗎?

謝謝

看更多先前的討論...收起先前的討論...
xxxyyyzzz iT邦研究生 1 級 ‧ 2009-01-10 10:49:30 檢舉
謝謝分享
jamesjan iT邦高手 1 級 ‧ 2009-01-14 16:58:21 檢舉
DTS Package 的排程設定
[img]http://www.ithome.com.tw/plog/resserver.php?blogId=1135&resource=4271-%E6%96%B0%E5%9C%96%E7%89%87+%284%29.jpg&mode=medium/img]
jamesjan iT邦高手 1 級 ‧ 2009-01-14 16:59:00 檢舉
jamesjan iT邦高手 1 級 ‧ 2009-01-21 12:17:18 檢舉
qek9qek9大,您該不會是把 Excel 放在您的 local HD 吧?
sorry 沒有講清楚

您的 SQL Agent or DTS Package 的排程都是在 Server 上執行的
所以當您在 Local 以 Enterprise Manager 設定該 Excel 檔時
該檔案存在您的 local 所以您手動時資料會寫入

但是當您設定排程時,環境是在 Server 上,所以它依照 Package 中設定的路徑去找該 Excel 檔時自然就找不到

所以把您的 Excel 檔放到 Server 上應該就可以了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

26
jamesjan
iT邦高手 1 級 ‧ 2009-01-09 17:03:00
最佳解答

我是使用 SQL 2000 的 DTS Package 轉的
您可以將 Report 的結果存成一個表格

Create 一個 Excel 檔,並在 Excel 檔先將表頭欄位設定好

然後透過 DTS 將表格輸出到 Excel

這樣就直接是 Excel 輸出格式了,請參考

看更多先前的回應...收起先前的回應...
qek9qek9 iT邦新手 3 級 ‧ 2009-01-14 10:37:21 檢舉

對不起,我一直找到不DTS的選項,
請問 DTS 的選項在哪裡?
是不是需要使用 Visual Basic 6.0 ?
謝謝。

jamesjan iT邦高手 1 級 ‧ 2009-01-14 11:59:13 檢舉

如果您是 SQL Server 2000 在 Enterprise Manager 中的 資料轉換服務 (Data Transformation Service) 選本機封裝(Local Package)中去新增
不需要寫程式滴
如果是 SQL Server 2005以上則為 SSIS(SQL Server Integration Services)
But 我沒用過

qek9qek9 iT邦新手 3 級 ‧ 2009-01-14 15:14:45 檢舉

謝謝!
我試了有成功,格式是可以直接轉好了,不過…
它有沒有辦法像「SQL Server 代理程式」的作業,可以自動執行每週定期要做的報表呢?

jamesjan iT邦高手 1 級 ‧ 2009-01-14 15:20:46 檢舉

在您的 DTS Package 上按右鍵可以排程
您可以在您的 Agent 執行完後再去執行這個 DTS Package

qek9qek9 iT邦新手 3 級 ‧ 2009-01-14 15:51:11 檢舉

我找不到設定排程的地方?
是選「執行步作」嗎?

jamesjan iT邦高手 1 級 ‧ 2009-01-14 16:57:38 檢舉

不是的
您要離開開啟的 DTS Package
在本機封裝的 List 上面去選取您建立的封裝
在上面按右鍵
請看討論

qek9qek9 iT邦新手 3 級 ‧ 2009-01-15 14:51:57 檢舉

我成功的將「排程封裝」設定好了,設定如下:
發生頻率:「每天」
每日:每隔「1天」
每日頻率:執行一次於「下午 02:40」
抹續時間:「2009/01/15」和「沒有結束日期」

但我發現,除非我要自已去在「封裝」上按右鍵,手動執行「執行封裝」才會執行,
我設定的時間,說真的,存檔的地方是有產生「正確格式」的excal了,不過,裡頭的內容
不過放多久都不會產生。

qek9qek9 iT邦新手 3 級 ‧ 2009-01-15 16:37:14 檢舉

我不知道設定的「排程封裝」有沒有成功。
我看已經建好欄位名稱的excel,在設定的時間過了之後,裡頭也沒有增加資料。
但可以從細目的時間中看到這個排程已經執行過了,不過,我確找不到執行後的結果在哪裡?
還是只有用手動執行「執行封裝」才會看excel有欄位也有資料。

qek9qek9 iT邦新手 3 級 ‧ 2009-01-17 01:08:46 檢舉

我發現問題出在,排程封裝 過後,是在代理程式 作業的地方會出現剛剛設排程的專案,不過,我看內容,在輸出檔案的地方是空白值,而且在寫語法的地方也是一長串我看起來沒有義意的字。
最後的結果就是失敗,沒有算出結果。
還是只有在剛做完「排程封裝」後,就用手動執行「執行封裝」才會看excel有欄位也有資料。

還是謝謝jamesjan兄,一直回覆我的問題,謝謝。

16
mmandy10
iT邦新手 4 級 ‧ 2009-01-10 10:05:43

可以試著用 bcp 指令
bcp 來源table out 目的\xx.xls -c -U"登入帳號" -P"登入密碼"'

qek9qek9 iT邦新手 3 級 ‧ 2009-01-14 16:53:12 檢舉

請bcp指令,要如何使用?
是否可以大概說明一下!
謝謝

jamesjan iT邦高手 1 級 ‧ 2009-01-14 17:02:59 檢舉

在該台 SQL Server 的主機上
開啟 cmd
輸入 bcp

C:\>bcp
使用方式: bcp {dbtable | query} {in | out | queryout | format} datafile
[-m maxerrors] [-f formatfile] [-e errfile]
[-F firstrow] [-L lastrow] [-b batchsize]
[-n native type] [-c character type] [-w wide character type]
[-N keep non-text native] [-V file format version] [-q quoted identifier]
[-C code page specifier] [-t field terminator] [-r row terminator]
[-i inputfile] [-o outfile] [-a packetsize]
[-S server name] [-U username] [-P password]
[-T trusted connection] [-v version] [-R regional enable]
[-k keep null values] [-E keep identity values]
[-h "load hints"]

我要發表回答

立即登入回答