5

是否有可能部署不同的組使用Visual Studio的SQL Server數據工具數據庫項目不同的發佈配置種子數據的?使用visual studio ssdt爲不同的發佈配置文件部署不同的種子數據?

我們知道你可以使用後部署腳本部署種子數據。 我們知道您可以使用發佈配置文件工具部署到不同的環境。 我們不知道的是如何將不同的種子數據部署到不同的環境。

我們爲什麼要這麼做?

  • 我們希望能夠做到這一點,所以我們可以有一個小的明確的種子數據集用於單元測試。
  • 我們需要一套更廣泛的數據部署到測試團隊的環境中,以便測試團隊根據
  • 來測試整個應用程序我們需要一組特定的種子數據用於產前環境。

回答

7

有您能做到這一點的幾種方法,第一種方法是檢查在後部署腳本環境等..

if @@servername = 'dev_server' 
begin 
    insert data here 
end 

稍微清潔的版本有不同的腳本爲每個環境的文件,並通過導入它們,R進口SQLCMD腳本,所以你可以有:

  • PostDeploy.sql
  • DevServer.sql
  • QAServer.sql

然後

if @@servername = 'dev_server' 
begin 
    :r DevServer.sql 
end 
if @@servername = 'qa_server' 
begin 
    :r QAServer.sql 
end 

您將需要確保到.sql文件的路徑是正確的,你複製它們與dacpac。

您不必使用@@服務器名稱,你可以使用SQLCMD變量,並通過他們在每一個環境,又幹淨了一點比硬編碼的服務器名稱。

第二種方法是moodify的dacpac與環境的具體之一更改後delpoy劇本,這是我的首選和最有效的CI構建的一部分,我的過程是:

  1. 檢查-in改變
  2. 構建服務器建立dacpac
  3. 構建需要dacpac,複製到開發,質量保證,督促等ENV文件夾
  4. 構建替換後部署腳本在每個特定的ENV腳本

我所說的腳本PostDeploy.dev.sql,PostDeploy.Qa.sql等,並設置構建動作爲「無」或將其添加爲「腳本,而不是在構建」。

要更換你只需要使用部署後腳本。淨包裝API或一些例子來看看我的Dir2Dac演示這確實是多:

https://github.com/GoEddie/Dir2Dac

更具體:

https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs

var part = package.CreatePart(new Uri("/postdeploy.sql", UriKind.Relative), "text/plain"); 

    using (var reader = new StreamReader(_postDeployScript)) 
    { 
       reader.BaseStream.CopyTo(part.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite)); 
    } 
+0

謝謝您的詳細解答。暫時我想我會使用你在「稍微更清晰的版本是爲每個環境有不同的腳本文件」中描述的多腳本方法。也許我們會在需求到達時查看DacPac方法。 – Dib

+0

我需要看看你正在使用的後一個選項,Ed。考慮到其中一些初始人口腳本的可能大小,這將是大量的數據包含在每個腳本中。我們正在考慮只要查看構建變量(如果它是「新建」)並立即運行發佈後的新事物(這可能是當前更好/更容易的選擇)。 –

2

我已經通過書面形式解決了這個一個Powershell腳本,在發佈時由項目文件中的Exec命令自動執行。

它創建一個腳本文件,其中包含在項目文件夾中找到的所有腳本(該文件夾的名稱與目標環境一樣)。

該腳本包含在部署後腳本中。

+0

嗯...這聽起來也是一個不錯的解決方案。 – Dib

相關問題