SQLCMD
項目
- 執行SQL
- TRUNCATE/INSERT/SELECT/UPDATE
- WRITE FILE
- DB無法連線,用DAC模式登入(ex:FOR KILL BLOCKID ID)
- KILL SPID
- 執行Stored Procedure
- DB維護
- BACKUP/RESTORE
- 查詢並回覆XML格式
- 可在batch檔執行
- 可透過加密連線Azure DB
- 有裝SQL, 就可以直接在dos下command
主機連線
WINDOWS驗證
sqlcmd -S <ComputerName> -E (use trusted connection)
帶帳密
sqlcmd -S<ComputerName> -d<DBName> -U<userName> -P<userPassword>
查詢
查詢DATA,查完就結束sqlcmd
-q "EXIT(set nocount on;SELECT top 10 * FROM dbo.list)"
- set nocount on 不回傳count數值
- EXIT() 查完直接離開程式
- 若在console上直接寫sql(不是call .sql檔或batch檔的方式), 並print資料, 要再下GO才會執行
查詢資料的sql寫在.sql檔, 呼叫.sql檔, 並將查詢結果寫在MyOutput.rpt檔
sqlcmd -S <ComputerName> -i <MyScript.sql> -o <MyOutput.rpt>
寫在batch檔執行
sqlcmd -S XXX -d XXX -U XXX -P XXX -q "EXIT(set nocount on;SELECT * FROM dbo.list)" -s " " -W -w 1024 -o "D:\MyData.csv" -h-1
寫檔
產CSV檔
-q "EXIT(set nocount on;SELECT top 10 * FROM dbo.list)" -s " " -W -o "D:\CWGV\MyData.csv" -h-1
- 若沒下參數, 預設fomat會有很多空白
- -S"," the delimiter
- -w number sets the length of the csv line before it wraps
- -W 移除欄位尾巴的空白
- -h-1 移除csv第一行的欄位名稱
- 若CSV分隔要用TAB, 要包成batch檔再執行, 不然tab處都會出現亂碼
- 若不想出現"共n筆資料"的文字, 在sql語法前加set nocount on;