iT邦幫忙

0

SQL CMDSHELL bcp 資料格式限制問題

  • 分享至 

  • xImage

不好意思,因老闆要求,小弟想利用批次檔
每日定時至SQL 2008中,擷取當日資料並轉為EXCEL檔後寄信至老闆信箱
我利用下列指令下QUERRY轉EXCEL

EXEC master..xp_cmdshell 'bcp "SELECT "W1" AS "機碼" FROM [CYGEAR].[dbo].[CMSMX] where MX016 like %A001%" queryout c:\test.xls -c -q -T'

SQL CMDSHELL bcp資料格式的限制與用法

問題1. SELECT
系統似乎只接受 SELECT "數值"
請問如果要輸入英文或中文數值,要使用什麼正確的方式寫入
問題2. WHERE
我用 WHERE CM001 LIKE "%A001%"去查詢
和 WHERE CM001 > "3"
2.1 系統顯示 CM001 非INT型態,故無法與"3"比較大小
2.2 系統無法判別 % 符號,故查尋失敗

我已上網爬了許多文,還是無法解決問題
故來此地向各位前輩求助

跪求各位大大幫忙解答,感謝

看更多先前的討論...收起先前的討論...
沒有辦法回答,都會發生錯誤
?..發生什麼錯誤XD
CalvinKuo iT邦大師 7 級 ‧ 2013-10-16 13:57:16 檢舉
給你參考:
使用 bcp 公用程式匯入及匯出大量資料 (SQL Server)
http://technet.microsoft.com/zh-tw/library/aa337544.aspx
SELECT範例:
http://technet.microsoft.com/zh-tw/library/ms187731.aspx
WHERE範例:

http://technet.microsoft.com/zh-tw/library/ms188047.aspx


若要 "求答案",你連資料表的欄位屬性與查詢條件都沒說明,你叫高手怎幫你。
這位大大您好:
不好意思,因為我不是IT人員,只是剛好以前學過一點
所以沒有時間可以很深入的去了解

我的疑問簡單的來說就是
我要 新增一個欄位"機碼" 填入數值"w1"
我如果在沒有使用bcp的情況下不會有錯誤,但是使用bcp他會顯示錯誤"w1"不存在
我嘗試將"w1"改為"1001"結果是可以輸出的,所以我認為bcp不接受欄位有數字以外的字元
我想求解 要怎麼樣才有辦法在欄位中填入數字以外的字元

另外 我用where .. like .. 條件有使用到 % 的時候,他也會顯示錯誤
我爬文有找到相關的問題,解決方式是以[]將%框住,在下end跳脫出去
但還是沒有用

最後 我在下where a(varchar) > b(int)的時候,他顯示不同屬性無法比較
我想問,是不是我一定要設一個變數(int)把a的數值給他去跟b比才可以解決
有沒有其他更簡單的方法

感謝您的回答...(繼續爬您給的資訊)
防火牆太猛了,把SQL語法當作是攻擊都擋住了
XD 真的很猛
大大我成功了,用預存程序就可以解決問題!!!非常感謝您XD
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

6
poiu124pat
iT邦新手 2 級 ‧ 2013-10-16 15:37:28
最佳解答

1.請先檢查資料表查詢的語法有沒有問題("SELECT "W1" AS "機碼" FROM [CYGEAR].[dbo].[CMSMX] where MX016 like %A001%"),這邊如果有問題,就要先修正。

2.把剛剛的資料表查詢與法,建立成預存程序,以後都用預存程序去呼叫就可以了。(如runproaaa)

3.執行bcp時,也可以呼叫預存程序,這樣比較不會有問題。(如 EXEC master..xp_cmdshell 'bcp "exec runproaaa" queryout c:\test.xls -c -q -T' )

大大,我去新增預存程序(ERPQuery)了
我直接下sql -> exec ERPQuery 是可以正確執行的
但是改為EXEC xp_cmdshell 'bcp "exec ERPQuery" queryout c:\TEST.xls -c -q -T'
就跑出下面訊息
Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]找不到預存程序 'ERPQuery'。
情況跟沒有用procedure一樣~.~,難道只能用其他方法了嗎QAQ

我懷疑是不是用exec去執行sql的話
是不是前面要先多一行認證...?

補充:以下是我實際操作的畫面

我要發表回答

立即登入回答