Sql-Server
如何使用 SQLCMD 創建可導入另一個數據庫系統的 csv
我可能以錯誤的方式做這件事,所以如果我遺漏了什麼,請指出我正確的方向。
我有一個安裝了 SQLCMD 的 Ubuntu 伺服器和一個帶有 MSSQL 數據庫的 Windows 伺服器。
我有一個工作腳本可以將來自 MSSQL 數據庫的查詢中的數據輸出到 CSV 文件中,但它不太正確。SQLCMD 創建了 2 個我想刪除的多餘功能,並且沒有關於如何執行此操作的真正明確指南。
樣本輸出:
header1,header2 -----,----- data1,data2 data3,data4 Network packet size (bytes): 4096 1 xact[s]: Clock Time (ms.): total 445 avg 445.0 (2.2 xacts per sec.)
因此,我不希望在 CSV 中出現的功能非常明顯。— 行和底部的輸出數據。
到目前為止,我的腳本看起來像這樣:
sqlcmd -S databaseserver -U "sa" -d database -p -W -Q "set nocount on; SELECT x as data, count(*) as datacount FROM location WHERE x IS NOT NULL GROUP BY x" -s "," -o output.csv -r0
我很高興使用在之後發生的操作來製作 .sh 文件,因此任何可以“完成工作”的本機 ubuntu 腳本方法都是可以接受的。我對編寫腳本沒有那麼自信,但通常可以弄清楚它們的作用。
因此,我不希望在 CSV 中出現的功能非常明顯。— 行和底部的輸出數據。
要刪除底部的輸出,請省略
-p
參數。sqlcmd -S databaseserver -U "sa" -d database -p -W -Q "set nocount on; SELECT x as data, count(*) as datacount FROM location WHERE x IS NOT NULL GROUP BY x" -s "," -o output.csv -r0
結果:
您可以使用該
-h
參數來控制標題Use -1 to specify that headers not be printed. Any value that is not valid causes sqlcmd to generate an error message and then exit.
但是您只能刪除或更改標題的頻率。
sqlcmd -S databaseserver -h -1 -U "sa" -d database -W -Q "set nocount on; SELECT x as data, count(*) as datacount FROM location WHERE x IS NOT NULL GROUP BY x" -s "," -o output.csv -r0
結果:
此處還使用的不太乾淨的解決方案可能是在執行選擇之前列印或選擇列標題。
sqlcmd -S databaseserver -h -1 -U "sa" -d database -W -Q "set nocount on; PRINT('header1,header2'); SELECT x as data, count(*) as datacount FROM location WHERE x IS NOT NULL GROUP BY x" -s "," -o output.csv -r0
結果: