最近新發現一個新的玩具「Azure SQL Database 模擬器」,因此花了一點時間來安裝測試,看看到底有甚麼樣的不同。
這幾天在網路上查找 SQL Server 2022 的相關資料時,無意間看到了一篇文章「Azure SQL Database 模擬器簡介 - Azure SQL Database | Microsoft Docs」,在好奇心的驅使下,就來安裝看看到底這是甚麼樣的一個新東西。
從文章中的說明,看起來是微軟提供一個 Docker Image ,可以啟動一個虛擬的 Azure SQL Database 的服務,並且在 VS Code 下增加一個新的 Extension ,這樣就可以直接在 VS Code 下面來開發資料庫專案了,看起來似乎是很厲害的樣子,因此我就來弄個 VM 測試看看,是否真的如想像中的那麼威。
首先在我的測試環境中,因為要安裝 Docker ,因此需要先把 Hyper-V 給安裝起來

增加 Hyper-V 的功能之後,就可以前往 Docker 的網站,下載 Windows 版本的 Docker Desktop 來進行安裝。基本上安裝就是執行然後選擇下一步,沒有甚麼複雜的選項需要特別去注意
當重新啟動之後,再啟動 Docker Desktop 的時候,他會出現個提示要你去接受它們的使用條款
但接受之後可能會類似以下的狀況,會要您安裝 WSL 2 ( Windows Subsystem for Linux ),因此按照提示中的網址去進行下載
執行 WSL 的安裝程式
安裝好之後,還需要啟動 PowerShell 的環境,執行 wsl --set-default-version 2 的指令來將 WSL 切換成為 2.0 的執行環境
設定完之後,就可以順利來啟動 docker desktop 的環境了
上述的過程只是先預備好 Docker 的環境,接著我們啟動安裝好 VS Code 的 IDE 環境。在側邊的選項中選擇 Extension ,然後在過濾條件輸入 SQL ,選擇安裝 SQL Server (mssql) 的延伸套件,在安裝的時候,他也會自動把 SQL Database Project 的這個延伸套件,一併都安裝進去。

安裝過程算蠻快的,接著就會在側邊多增加了兩個功能,此時我們就可以來試試看是否可以順利來建立資料庫專案了

建立資料庫專案在 VS Code 下面跟在 Visual Studio 的 IDE 環境下稍微有點不同,首先我們指定一個專案名稱 DEMO

接著設定專案位置

資料庫專案的平台,因為這個我是要測試 Azure SQLDB 模擬器,因此這個我選擇資料庫專案是「Azure SQL Database」

接下來這個選項我並不清楚他主要是甚麼意思,但看起來應該不大影響資料庫專案的設定,因此這裡我就選擇預設值「Yes」

基本上這樣就可以完成一個基本的資料庫專案,只是目前這個是一個空的專案,後面我們就來建立相關物件來測試一下了
既然要測試資料庫專案,那麼首先我先來試試看建立資料表,當選擇建立資料表之後,首先會要您設定資料表名稱,這裡我們就先設定個「Table1」來當範例

這裡看起來相關的設定會很陽春,就是讓您自己去輸入相關的欄位以及屬性,如果您熟悉用 Visual Studio 的資料庫專案,就會覺得這個實在是太陽春了,因為所有的設定您都必須要自己手動去打,雖然有提供一些便捷的 Intellisence 來讓你比較好輸入相關語法,但也就僅止於這樣了

當我們建立好一個資料表之後,就可以把這個資料庫專案來做發行,我們在專案的根結點上,按下滑鼠右鍵選擇「publish」,此時會要選擇我們要發行到哪裡去,這裡當然我們就選擇要發行到「Azure SQL Database emulator」

接著因為我們前面選擇是一個新的模擬器,因此這裡會出現一些要啟動 SQL 的 docker 所需要的參數,像是 port ( 這裡我故意不用 1433 避免跟我原本電腦上安裝的 SQL Server 的 Port 相衝突,因此您安裝的時候如果電腦上有先安裝 SQL Server,要記得避開相對應的 port )

sa 的密碼

是否接受 SQL Server 的授權規範

選擇搭配的影像檔版本,基本上沒有特別需求的話,就選擇最新的就可以了

設定檔所在位置,這裡我就沒有特別去設定了

選擇一個將要發行的資料庫

接下來就可能會需要等待一小段時間了,會透過 Internet 將 docker image 給下載回來

過了幾分鐘之後,我們就可以從 OUTPUT 上看到類似以下的訊息,看起來資料庫專案已經佈署到模擬器上面去了

當然不免俗的我們也用 SSMS 連上去來看一下,雖然說是所謂的模擬器,但看起來應該就是一個 Linux 版本的 SQL Server,因為透過 SSMS 來看,並不像是 Azure SQL Database 一般,因為以往我們要是使用 SSMS 來連結 Azure SQL Database 的話,那麼在 Server 的節點上,其下會只有兩三個功能可以選擇

以下我連接一個真正的 Azure SQL Database,下圖可以看出當我們連上 Azure SQL Database 的時候,像是伺服器物件、複選等功能都不會出現,而且看到的版號會是 12.0,兒上圖我們連上的模擬器,看起來他就有比較多功能,而且版本號碼看起來應該就是 SQL Server 2019 的版本

稍微用了一下也測試相關功能,看起來目前 SQL Database 的模擬器,就是一個 Linux 版本的 SQL Server on Docker,只是當你要去使用的時候,不用去想你要怎麼來啟動 Docker 和指定相關參數,他都會幫你設定完畢,算是蠻貼心的一個功能。
如果要說缺點,那麼應該是目前資料庫專案所能提供的功能太過陽春,沒有甚麼可以用得 GUI 的設定,都必須自己要純手工來建立相關物件的 SQL 語法,這個對於使用資料庫專案的人來說,可能會因此打退堂鼓,還是乖乖回去使用 Visual Studio 來開發資料庫專案;而另外一個我目前也沒有辦法找到解決辦法的地方,就是在 Build 或 Publish 的時候,可能因為我是在中文的 Windows 環境下面,因此一些輸出有中文的訊息,在輸出的地方看到的就是一些亂碼,我雖然有嘗試將編碼改成 big5 ,但這個部份似乎還是沒有效果。

而扣除上述所說的一些我個人覺得不佳的部分,基本上 VS Code 搭配 Azure SQL Database 模擬器,看起來應該就可以達到跨平台的開發 SQL Server 資料庫專案的一個解決辦法,也可以避免像是我們平常測試使用 SQL Server ,但是發行要佈署到 Azure SQL Database 的時候,那麼資料庫專案就要一直改來改去對應的資料庫平台,因為發行的地方不同,資料庫專案不能混用,都必須要因為要發行到那邊就要做個調整,而當使用 Azure SQL Database 的時候,用 VS Code 似乎就可以來避開這個問題,算是還蠻不錯的一個解決方法。