[SQL Project] 依條件部署資料庫

資料庫專案範本,已經成為我在開發專案時,不可或缺的資料庫管理工具,善用它提供的機制,可降低出錯的機率。

Predeployment | Postdeployment Scripts 它是資料庫專案所提供的語法,是一種SQLCMD,現在我要利用它來部署我的開發 | 測試環境,資料庫專案有 DDL,在不同的條件,呼叫不同的 DML

應用情境:

開發環境與測試環境需要有不同的資料內容,資料庫專案管理著DDL,也有預設的 DML,因為預設的 DML 我無法預測會有哪些資料(隨著專案進行會有所變化), 為了讓測試情境擁有期望資料,必須與預設 DML 切割,所以我必須要有兩份 DML。

 

部署流程:

 

開發環境:

Windows 10 Enterprise x64

Visual Studio 2015 Update1

 


定義 SQLCMD 環境變數:

在資料庫專案→屬性→SQLCMD Variables→建立變數名稱 PublishFile

Default:變數的初始值

如下圖:

接著新增一個 Script(Not in build),我要用它來放 DML 語法,如下圖:

最後新增一個 Post-Deployment Script ,鍵入以下程式碼

  • '$(PublishFile)' 就是我們剛剛建立的環境變數
  • 條件成立時調用 Script1.sql
IF  '$(PublishFile)' = 'localdb.publish.xml'
BEGIN
PRINT ' Creating Test Data for Debug configuration ';
:r .\Script1.sql
END

當對著資料庫專案按發行,就會彈跳出以下畫面,只要在 Value 輸入特殊字串讓 IF 區段能執行

有關更多的SQLCMD請參考:
https://msdn.microsoft.com/zh-tw/library/ms174187%28v=sql.120%29.aspx

使用SQLCMD時有一個很重要的關鍵,就是 Script1.sql 裡面不能有 GO 語法

下圖來自:http://stackoverflow.com/questions/7151021/conditional-logic-in-postdeployment-sql-script-using-sqlcmd

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo