iT邦幫忙

0

[SQL Server] sqlcmd 執行語法&匯出檔案

使用語法
sqlcmd -S IP位址 -U 帳號 -P 密碼 -d 資料庫名稱 -Q 指令 -i 指令檔完整路徑
-o 輸出檔完整路徑 -s 分隔符號 -W 標題列

執行語法

sqlcmd -S 127.0.0.1 -U sa -P pwd -d DBname -s"," -Q "create table mytable(col1 int)"

將select * from tmp 的結果存成檔案

sqlcmd -S 127.0.0.1 -U sa -P pwd -d DBname -s"," -Q "SELECT top 10 * FROM tmp" -o E:\tmp.csv -W
將以上語法存成批次檔.bat後,執行它.
就會在E槽看到檔案tmp.csv

https://ithelp.ithome.com.tw/upload/images/20190424/20106764qhml0LVSB1.png

也可以把query存在檔案裡 -i 指令檔完整路徑
sqlcmd -S 127.0.0.1 -U sa -P pwd -d DBname -s"," -i E:\test.sql -o E:\tmp.csv -W

去除最後一行的(10個受影響的資料列)

在query 先加上 SET NOCOUNT on;
sqlcmd -S 127.0.0.1 -U sa -P pwd -d DBname -s"," -Q "SET NOCOUNT on;SELECT top 10 * FROM tmp" -o E:\tmp.csv -W
https://ithelp.ithome.com.tw/upload/images/20190424/201067647rqQ7Iu3kE.png

去除標題列中的dash line

REM Get the column headers
sqlcmd -S 127.0.0.1  -U sa -P sa -d dbname  -s","   -Q "SET NOCOUNT on;SELECT top 10 * FROM tmp" -o "E:\20.csv"  

rem Remove hyphen line
findstr /R /C:"^[^-]*$" E:\20.csv > E:\21.csv

執行 批次檔.bat
就會在E:\21.csv看到產出的檔案
https://ithelp.ithome.com.tw/upload/images/20190424/20106764214eb3pO4R.png

匯出csv 001 的0不見了

處理方式
1.加' 缺:打開,如果沒有點cell的話,就會看到'
sqlcmd -S 127.0.0.1 -U sa -P pwd -d DBname -s"," -Q "SET NOCOUNT on;SELECT top 10 CHAR(39) +'0001' " -o E:\tmp.csv -W
2.字串後加TAB 缺:字串後有TAB
sqlcmd -S 127.0.0.1 -U sa -P pwd -d DBname -s"," -Q "SET NOCOUNT on;SELECT top 10 '0001'+'' " -o E:\tmp.csv -W

ref

使用Sqlcmd執行指令檔來匯入資料
https://dotblogs.com.tw/whd/2016/01/10/155154
設分隔-s","
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/3b18fc32-b966-4de3-96a1-e237b07396f7/sqlcmd-outfile-as-tab-delimited-text-file?forum=sqltools
去除dash line
https://stackoverflow.com/questions/30452066/removing-hyphens-in-sqlcmd/30453893

bcp &sqlcmd 教學
https://www.excel-sql-server.com/sql-server-export-to-excel-using-bcp-sqlcmd-csv.htm


尚未有邦友留言

立即登入留言