sqlcmd 匯出csv檔&使用批次檔案(bat)

sqlcmd 使用語法基本說明

sqlcmd -S IP位址 -U 帳號 -P 密碼 -d 資料庫名稱 -Q 指令 -i sql指令檔完整路徑
-o 輸出檔完整路徑 -s 分隔符號 -W 去除空白字元

sqlcmd 執行 sql 檔案產生csv檔

sqlcmd 執行 sql 檔案(-W:去除空白字元),並產生csv檔,然後再使用 findstr 去除csv檔案內容中的欄位底線

// 建立一個批次檔案: emp.bat 內容如下:
REM Get the column headers
sqlcmd -S 172.16.1.7  -U sa -P PWD -d DBName -s"," -i "員工卡號資料.sql" -o "emp_tmp.csv" -W

REM Remove hyphen line
findstr /R /C:"^[^-]*$" "emp_tmp.csv" > "員工.csv"
del emp_tmp.csv

使用 SQLCMDPASSWORD 環境變數透過 SQLCMD 工具連線資料庫的範例:

SET SQLCMDPASSWORD=myPassword123
SQLCMD -S myServerName -d myDatabaseName -U myUserName

在這個範例中:

我們先使用 SET SQLCMDPASSWORD=myPassword123 設定 SQLCMDPASSWORD 環境變數為 myPassword123。

接著使用 SQLCMD 命令連線到資料庫,其中 -S 指定伺服器名稱, -d 指定資料庫名稱, -U 指定使用者名稱。
由於我們已經設定了 SQLCMDPASSWORD 環境變數,SQLCMD 工具就不需要我們在命令列中輸入密碼了。
這樣做可以簡化密碼輸入的流程,但請記得在使用完畢後清除 SQLCMDPASSWORD 環境變數,以確保安全性。

sqlcmd 語法說明

C:\User>sqlcmd -?
Microsoft (R) SQL Server Command Line Tool
Version 9.00.3042.00 NT INTEL X86
Copyright (c) Microsoft Corporation.  All rights reserved.

usage: Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-d use database name] [-l login timeout]     [-t query timeout]
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-q "cmdline query"]   [-Q "cmdline query" and exit]
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f <codepage> | i:<codepage>[,o:<codepage>]] [-Z new password and exit]
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, enviroment variables [and exit]]
  [-x disable variable substitution]
  [-? show syntax summary]

sqlcmd 的練習

C:\User>sqlcmd -S 172.16.1.7 -U sa
Password:
1> !!dir
 磁碟區 C 中的磁碟是 OS
 磁碟區序號:  E60D-DE0C

 C:\User 的目錄

2024/05/30  下午 03:47    <DIR>          .
2022/12/13  上午 09:58    <DIR>          ..

2> :help
:!! [<command>]
  - Executes a command in the Windows command shell. 
  //- 在 Windows 命令 shell 中執行命令。
:connect server[\instance] [-l timeout] [-U user [-P password]]
  - Connects to a SQL Server instance. 
  //- 連接到 SQL Server 資料庫。
:ed
  - Edits the current or last executed statement cache. 
  //- 編輯當前語句緩存或上次執行的語句緩存。
:error <dest>
  - Redirects error output to a file, stderr, or stdout.
  //- 將錯誤輸出重定向到檔、stderr 或 stdout。
:exit
  - Quits sqlcmd immediately.
  //- 立即退出 sqlcmd。
:exit()
  - Execute statement cache; quit with no return value.
  //- 執行指定的查詢;沒有返回結果。
:exit(<query>)
  - Execute the specified query; returns numeric result.
  //- 執行指定的查詢;返回數字結果。
go [<n>]
  - Executes the statement cache (n times).
  //- 執行語句緩存(n 次)。
:help
  - Shows this list of commands. 
  //- 在 Windows 命令 shell 中执行命令。
:list
  - Prints the content of the statement cache.
  //- 輸出語句緩存的內容。
:listvar
  - Lists the set sqlcmd scripting variables.
  //- 列出設置的 sqlcmd 腳本變數。
:on error [exit|ignore]
  - Action for batch or sqlcmd command errors.
  //- 在執行批次處理或 sqlcmd 命令時應對錯誤的措施。
:out <filename>|stderr|stdout
  - Redirects query output to a file, stderr, or stdout.
  //- 將查詢輸出重定向到檔、stderr 或 stdout。
:perftrace <filename>|stderr|stdout
  - Redirects timing output to a file, stderr, or stdout.
  //- 將計時輸出重定向到檔、stderr 或 stdout。
:quit
  - Quits sqlcmd immediately.
  //- 立即退出 sqlcmd。
:r <filename>
  - Append file contents to the statement cache.
  //- 將檔內容追加到語句緩存之後。
:reset
  - Discards the statement cache.
  //- 放棄語句緩存。
:serverlist
  - Lists local and SQL Servers on the network.
  //- 列出本地 SQL Server 和網路中的 SQL Server。
:setvar {variable}
  - Removes a sqlcmd scripting variable.
  //- 刪除 sqlcmd 腳本變數。
:setvar <variable> <value>
  - Sets a sqlcmd scripting variable.
  //- 設置 sqlcmd 腳本變數。

Sqlcmd的命令都是以 ”:” 符號開始的(除了GO,打:GO系統會認為是向緩存區添加了一段字元:GO),雖然有些命令可以省略”:”,但是為了安全與方便記憶,使用的時候推薦大家還是打上”:”吧

參考:

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

Removing hyphens in SQLCMD

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *