| 參數 | 環境變數 | 說明 |
-S | SQLCMDSERVER | 伺服器/執行個體名稱 |
-U / -P | SQLCMDUSER / SQLCMDPASSWORD | SQL 驗證帳密 |
-E | - | 信任連線(Windows 驗證) |
-d | SQLCMDDBNAME | 預設資料庫 |
-i | - | 輸入腳本檔 |
-o | - | 輸出檔案 |
-v | - | 定義腳本變數 var=value |
-h | SQLCMDHEADERS | 標題列顯示間隔(列數) |
-s | SQLCMDCOLSEP | 欄位分隔字元 |
-w | SQLCMDCOLWIDTH | 輸出欄寬 |
-b | - | 遇錯誤時結束並回傳 ERRORLEVEL |
-V | SQLCMDERRORLEVEL | 嚴重性層級閾值 |
三、 互動模式基本操作
C:\> sqlcmd -E
1> SELECT name FROM sys.databases;
2> GO
-- 執行批次
1> :ServerList
-- 列出網路上可見的 SQL Server
1> :Help
-- 顯示所有內建命令
1> QUIT
-- 離開
四、 執行腳本檔與輸出導向
-- 1. 直接執行腳本,結果輸出螢幕
sqlcmd -E -i deploy.sql
-- 2. 指定輸出檔
sqlcmd -E -i deploy.sql -o deploy.log
-- 3. 互動模式中導向
sqlcmd -E
1> :out results.txt
2> :r deploy.sql
3> GO
五、 腳本變數:外部傳入與內部設定
5.1 外部傳入(-v)
-- deploy.sql
SET NOCOUNT ON;
SELECT $(Cols) FROM $(TableName);
-- 命令列
sqlcmd -E -i deploy.sql -v Cols="name, object_id" TableName="sys.objects"
5.2 內部設定(:setvar)
-- backup_template.sql
USE master;
BACKUP DATABASE [$(db)] TO DISK = '$(file)';
-- backup_msdb.sql
:setvar db msdb
:setvar file C:\Backup\msdb.bak
:r backup_template.sql
5.3 列出目前變數
:Listvar
六、 核心內建命令速查
| 命令 | 功能 |
:r <file> | 執行外部腳本檔 |
:ServerList | 列舉網路伺服器 |
:List | 列出目前緩衝區批次 |
:Listvar | 顯示所有變數 |
:Error <file>|STDERR|STDOUT | 錯誤輸出導向 |
:Out <file>|STDOUT|STDERR | 結果輸出導向 |
:Perftrace <file>|STDOUT|STDERR | 效能追蹤輸出 |
:Connect server[\instance] [timeout] [user [pwd]] | 切換連線 |
:On Error [exit|ignore] | 錯誤處理模式 |
:setvar <var> <value> | 設定腳本變數 |
:Help | 顯示說明 |
:XML [ON|OFF] | 切換 XML 輸出格式 |
七、 實務應用場景
- 自動化部署:CI/CD Pipeline 呼叫
sqlcmd -b -i release.sql -o release_$(date).log,失敗即中止並記錄。
- 多環境參數化:同一腳本,透過
-v Env=Prod 切換資料庫名稱、檔案路徑。
- 大量資料匯入:
sqlcmd -E -i bulk_insert.sql -h -1 -s "," -w 65535 產生 CSV 格式輸出。
- 健康檢查腳本:定期排程執行
health_check.sql,結果寄送郵件/寫入監控表。
八、 最佳實踐建議
- 腳本檔儲存為 **UTF-8 with BOM** 或 **Unicode**,避免中文亂碼。
- 啟用
-b 讓自動化流程能偵測失敗。
- 變數命名慣例:大寫 + 底線(
$(DB_NAME)),提升可讀性。
- 敏感資訊(密碼)勿寫在腳本,改用
-P 參數或環境變數傳入。
- 大量資料操作前先
SET NOCOUNT ON 減少網路封包。
- 上一篇文章: SQL Server 2005 查詢效能優化 50 條黃金法則(索引、鎖定、統計資訊、硬體、T-SQL 寫法全方位)
- 下一篇文章: T-SQL 分隔字串第 N 片段更新:單一陳述式實作字串分段修改
Copyright ©
程式碼之家 All Rights Reserved