前言

在管理大型SQL Server資料庫時,SQLCMD是一個不可或缺的命令列工具。無論是執行日常維護工作、資料匯入匯出,還是建立自動化作業,SQLCMD都能幫助我們更有效率地完成這些任務。本文將詳細介紹SQLCMD的各種應用方式,幫助你掌握這個強大的工具。

SQLCMD 功能概觀 SQLCMD 資料匯入匯出 執行SQL指令 資料庫備份 自動化排程

SQLCMD基本語法

SQLCMD的基本語法結構如下:

1
2
3
4
5
6
7
8
sqlcmd 
-S <伺服器名稱> -- 指定SQL Server執行個體
-U <使用者名稱> -- 指定登入帳號
-P <密碼> -- 指定密碼
-d <資料庫名稱> -- 指定要使用的資料庫
-i <輸入檔案> -- 指定要執行的SQL指令檔
-o <輸出檔案> -- 指定輸出結果的檔案
-r -- 將錯誤訊息輸出到stderr

主要應用場景

1. 資料匯入匯出

大型資料庫的匯入是SQLCMD最常見的應用之一。以下是一個完整的匯入範例:

1
2
3
4
5
-- 匯入資料庫備份
sqlcmd -S 192.168.0.3 -U DBAdmin -P MyPassword -d TargetDB -r -i D:\backup.sql

-- 匯出查詢結果
sqlcmd -S ServerName -U DBAdmin -P MyPassword -d SourceDB -Q "SELECT * FROM Users" -o "D:\export.txt"

2. 執行SQL指令檔

SQLCMD可以執行預先準備好的SQL指令檔:

1
2
3
4
5
-- 執行單一SQL檔案
sqlcmd -S ServerName -U DBAdmin -P MyPassword -i "D:\scripts\maintenance.sql"

-- 執行多個SQL檔案並記錄結果
sqlcmd -S ServerName -U DBAdmin -P MyPassword -i "D:\script1.sql" -i "D:\script2.sql" -o "D:\log.txt"

3. 資料庫備份

透過SQLCMD進行資料庫備份:

1
2
3
4
5
-- 完整備份
sqlcmd -S ServerName -U DBAdmin -P MyPassword -Q "BACKUP DATABASE MyDB TO DISK='D:\Backups\MyDB.bak'"

-- 差異備份
sqlcmd -S ServerName -U DBAdmin -P MyPassword -Q "BACKUP DATABASE MyDB TO DISK='D:\Backups\MyDB_Diff.bak' WITH DIFFERENTIAL"

4. 自動化作業排程

結合Windows排程器使用SQLCMD:

1
2
3
-- 建立批次檔案(.bat)
@echo off
sqlcmd -S ServerName -U DBAdmin -P MyPassword -d MyDB -i "D:\DailyMaintenance.sql"

進階技巧

變數使用

SQLCMD支援使用變數,讓指令更具彈性:

1
2
-- 使用變數
sqlcmd -S $(Server) -U $(User) -P $(Password) -v DB="MyDatabase" -Q "SELECT * FROM $(DB).dbo.Users"

錯誤處理

加入錯誤處理機制:

1
2
3
4
5
6
7
8
9
10
11
-- 設定錯誤處理
:on error exit
:setvar ErrorLevel 0
BEGIN TRY
-- 你的SQL指令
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage
:setvar ErrorLevel 1
END CATCH
GO

注意事項

  1. 密碼安全性:避免在指令中直接寫入密碼,建議使用環境變數或設定檔
  2. 效能考量:大型檔案匯入時,建議使用批次處理
  3. 錯誤記錄:務必加入適當的錯誤處理與記錄機制
  4. 權限控制:確保SQLCMD執行帳號擁有適當的權限

結論

SQLCMD是一個功能強大的命令列工具,透過本文的介紹,相信你已經對它的各種應用有了深入的了解。善用SQLCMD不只能提升工作效率,更能建立更穩定的資料庫維護機制。