安裝工具
需先安裝 Python 3
pip install mssql-scripter
參數說明
僅列出有使用到的參數及說明,其餘可參考 github:mssql-scripter
-S , --server DB伺服器名稱
-d , --database DB名稱
-U , --user 登入DB的使用者名稱
如果不輸入,預設使用 Windows Authentication 登入
-P , --password 登入DB的密碼
可以透過設置環境變數 MSSQL_SCRIPTER_PASSWORD 設定,避免明文
-f , --file-path T-SQL 語法儲存路徑
--file-per-object 由預設將所有指令匯出成1個.sql檔,
改為將每個物件的操作個別匯出成.sql檔。
--data-only 由預設只產出 CREATE schema 的腳本語法,
改為只產出 INSERT 所有資料的腳本語法。
--schema-and-data 由預設只產出 CREATE schema 的腳本語法,
改為產出包含 CREATE schema 和 INSERT 所有資料的腳本語法。
--script-create 編寫物件 CREATE 語句的腳本。
--script-drop 編寫物件 DROP 語句的腳本。
--script-drop-create 編寫物件包含 CREATE 和 DROP 語句的腳本。
--target-server-version 指定輸出的 T-SQL 語法要相容於哪個 SQL Server 版本
2005, 2008, 2008R2, 2012, 2014, 2016, vNext, AzureDB, ...
--exclude-types 要從腳本中排除的指定類型的資料庫物件。
--check-for-existence 在刪除或更改之前檢查具有給定名稱的物件是否存在,
或者在創建之前檢查具有給定名稱的物件不存在。
--exclude-use-database 不生成 USE [DATABASE] 語句。
--display-progress 顯示 mssql-scripter 執行進度
情境範例
情境 1
- 使用 Windows (AD) 驗證登入
位址:192.168.xxx.xxx
- 編寫 T-SQL 語法
資料庫:DBName
條件:僅含結構描述
- 將 T-SQL 語法儲存
檔名:schema.sql
- 使用 Windows (AD) 驗證登入
mssql-scripter -S '192.168.xxx.xxx' -d 'DBName' > 'schema.sql'
情境 2
- 使用 SQL Server 驗證登入
位址:192.168.xxx.xxx
名稱:admin
密碼:S{L5ENHnD~ZD
- 編寫「僅含資料」的 T-SQL 語法
資料庫:DBName
條件:僅含資料
- 將 T-SQL 語法儲存
路徑:D:\mssql-scripter\data.sql
- 使用 SQL Server 驗證登入
mssql-scripter -S '192.168.xxx.xxx' -U 'admin' -P 'S{L5ENHnD~ZD' -d 'DBName' --data-only -f 'D:\mssql-scripter\data.sql'
註:可透過設置 MSSQL_SCRIPTER_PASSWORD
環境變數來避免密碼明文
SET MSSQL_SCRIPTER_PASSWORD='S{L5ENHnD~ZD'
mssql-scripter -S '192.168.xxx.xxx' -U 'admin' -d 'DBName' --data-only -f 'D:\mssql-scripter\data.sql'
情境 3
- 使用 Windows (AD) 驗證登入
位址:192.168.xxx.xxx
- 編寫 T-SQL 語法
資料庫:DBName
條件1:含結構描述
條件2:每個物件 1 個檔案
- 將 T-SQL 語法儲存
路徑:D:\mssql-scripter\data
- 顯示執行進度
- 使用 Windows (AD) 驗證登入
mssql-scripter -S '192.168.xxx.xxx' -d 'DBName' --schema-and-data --file-per-object -f 'D:\mssql-scripter\data' --display-progress
註1:--file-per-object
將每個物件個別建立檔案,可作為資料庫版控用途
註2:-f
給定的資料夾路徑要確保沒有任何檔案存在,否則無法執行
情境 4
- 使用 Windows (AD) 驗證登入
位址:192.168.xxx.xxx
- 編寫 T-SQL 語法
資料庫:DBName
條件1:含結構描述與資料
條件2:每個物件 1 個檔案
條件3:包含 DROP 與 CREATE 語句
條件4:排除 DATABASE 類型的物件
條件5:避免產生 USE [DBName] 語句
- 將 T-SQL 語法儲存
路徑:D:\mssql-scripter\data_
- 顯示執行進度
- 使用 Windows (AD) 驗證登入
mssql-scripter -S '192.168.xxx.xxx' -d 'DBName' --schema-and-data --file-per-object -f 'D:\mssql-scripter\data_' --script-drop-create --exclude-types 'DATABASE' --exclude-use-database --display-progress
情境 5
- 使用 Windows (AD) 驗證登入
位址:192.168.xxx.xxx
- 編寫 T-SQL 語法
資料庫:DBName
條件1:含結構描述與資料
條件2:每個物件 1 個檔案
條件3:包含 DROP 與 CREATE 語句
條件4:DROP 與 CREATE 語句加入是否存在要刪除物件的判斷
條件5:排除 DATABASE 類型的物件
條件6:避免產生 USE [DBName] 語句
- 將 DROP T-SQL 語法儲存
路徑:D:\mssql-scripter\app_v1\drop
- 將 CREATE T-SQL 語法儲存
路徑:D:\mssql-scripter\app_v1\create
- 使用 Windows (AD) 驗證登入
mssql-scripter -S '192.168.xxx.xxx' -d 'DBName' --schema-and-data --file-per-object -f 'D:\mssql-scripter\app_v1\drop' --script-drop --check-for-existence --exclude-types 'DATABASE' --exclude-use-database
mssql-scripter -S '192.168.xxx.xxx' -d 'DBName' --schema-and-data --file-per-object -f 'D:\mssql-scripter\app_v1\create' --script-create --check-for-existence --exclude-types 'DATABASE' --exclude-use-database