以往都是使用 localdb 來進行開發和自動化測試,但它只能支援 Windows 平台,若是要跨平台,SQL Server 容器是選項之一,接下來我們就來看看要怎麼使用。
跟資料庫有關的測試可以稱操作資料庫的動作是倉儲(Repository)物件的單元測試,或者是,商業邏輯物件和倉儲物件的集成測試,不管怎麼叫,基本上對於資料庫的操作案例也應該會涵蓋到;原則上,案例不會多,至少會有一個,再重要性來決定要不要增加。
開發環境
- WSL2 in Windows 10
在 Windows 10 安裝 WSL2 + Docker | 余小章 @ 大內殿堂 - 點部落 (dotblogs.com.tw)
通過 zsh + zim + powerlevel10k 讓 Windows Terminal + WSL2 的指令碼具有自動補完功能 | 余小章 @ 大內殿堂 - 點部落 (dotblogs.com.tw) - SQL Server in Linux
必要條件,參考官方文件:Docker:安裝 Linux 上的 SQL Server 容器 - SQL Server | Microsoft Docs
運行 SQL Server Container
語法:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=pass@w0rd1~" \
-p 1433:1433 --name sql2019 -h sql2019 \
-d mcr.microsoft.com/mssql/server:2019-latest
設定 SA_PASSWORD 的時候必須符合密碼複雜性要求:
- 密碼不包含使用者的帳戶名稱,也就是不能包含 sa 這個字。
- 密碼長度至少為 8 個字元,密碼長度最多可達 128 個字元。
- 密碼包含下列四種類別的其中三種:
- 拉丁文大寫字母 (A 到 Z)
- 拉丁文小寫字母 (a 到 z)
- 以 10 為基底的數字 (0 到 9)
- 非英數字元,例如:驚嘆號 (!)、錢幣符號 ($)、數字符號 (#) 或百分比符號 (%)
執行結果如下圖:

更多的環境變數請參考:在 Linux 上設定 SQL Server 的環境變數 - SQL Server | Microsoft Docs
PS.docker run = docker pull + docker create + docker start
若使用以 RedHat 為基礎的容器映像,請參閱 執行 RHEL 型的容器映像。
若要查看所有可用的映像,請參閱 Docker Hub 頁面。
下圖 docker run 參數描述,出自 Docker:安裝 Linux 上的 SQL Server 容器 - SQL Server | Microsoft Docs

官方建議,將 -h 與 --name 設為相同的值,這會讓識別目標容器更輕鬆。
從外部連結 SQL ServerContainer
使用 SSMS 連接
輸入內容如下圖:

連結成功,這看起來就跟一般的伺服器沒啥兩樣
![File
Search • Microsoft SQL Server Management Studio
Edit View Debug SQLComplete Unit Test Tools Window
JD New Query
Help
Quick Launch (Ctrl •Q)
@ dbForgeSearch O Help •
Object Explorer
Connect •
-s (SQL Sevvel 53.1 - Sd)
Databases
• Security
Server Objects
• Replication
• PolyBase
Always On High Availability
Management
Integration Services Catalogs
H SQL Server Agent (Agent XPs disable
E] XEvent Profiler
O Ready
Search -a
DDL
x
Data Search
p.
• • Al object types
devart](https://dotblogsfile.blob.core.windows.net/user/余小章/af2fa0f5-514b-4742-8fe2-8a8ad4eb9bc2/1629618348.png)
使用 sqlcmd 連結
下載位置:sqlcmd 公用程式 - SQL Server | Microsoft Docs
sqlcmd -S localhost,1433 -U SA -P "pass@w0rd1~"
切換到 Powershell,我的開發環境有 sqlcmd 就可以直接用了
![X Yao Chang Yu-SQLCMD
Yao Chang Yu@113Neee382
) sqlcmd
localhost . 11433
-p "pass@wOrd1""
-s
SA
-U
o
[15:37]
x](https://dotblogsfile.blob.core.windows.net/user/余小章/af2fa0f5-514b-4742-8fe2-8a8ad4eb9bc2/1629618917.png)
如果成功,您應該會收到 sqlcmd 命令提示字元:1>
進入容器
語法
docker exec -it sql2019 /opt/mssql-tools/bin/sqlcmd -U SA -P pass@w0rd1~ -W
如果成功,您應該會收到 sqlcmd 命令提示字元:1>
接下來就可以操作 SQL Server 了,

sqlcmd 操作
查詢
SELECT Name from sys.Databases
GO

結束 sqlcmd 命令提示字元
QUIT
執行結果如下圖:

變更 SA 密碼
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P "<YourStrong@Passw0rd>" \
-Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong@Passw0rd>"'
清理
移除容器
docker ps -a
docker stop sql2019
docker rm sql2019

移除映像檔
docker images
docker rmi 56beb1db7406

參考
Docker:安裝 Linux 上的 SQL Server 容器 - SQL Server | Microsoft Docs
使用 Docker 執行 SQL Server on Linux 容器之常用工具與命令 | The Will Will Web (miniasp.com)
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET