SQLCMD應用範例

  • 1147
  • 0
  • SQL
  • 2018-11-27

SQLCMD

參考文件-SQLCMD微軟

項目

功能

  1. 執行SQL
    1. TRUNCATE/INSERT/SELECT/UPDATE
    2. WRITE FILE
  2. DB無法連線,用DAC模式登入(ex:FOR KILL BLOCKID ID)
    1. KILL SPID
  3. 執行Stored Procedure
    1. DB維護
    2. BACKUP/RESTORE
  4. 查詢並回覆XML格式
  5. 可在batch檔執行
  6. 可透過加密連線Azure DB
  7. 有裝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)"

  1. set nocount on    不回傳count數值
  2. EXIT()    查完直接離開程式
  3. 若在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

  1. 若沒下參數, 預設fomat會有很多空白                
  2. -S","    the delimiter
  3. -w number    sets the length of the csv line before it wraps
  4. -W    移除欄位尾巴的空白
  5. -h-1    移除csv第一行的欄位名稱
  6. 若CSV分隔要用TAB, 要包成batch檔再執行, 不然tab處都會出現亂碼
  7. 若不想出現"共n筆資料"的文字, 在sql語法前加set nocount on;