Sql-Server

在 SQL 項目中包含大量配置數據的最佳方式是什麼?

  • April 21, 2020

我有一個SQL Server Database Project帶有數據庫的 BIDS,我動態發佈到各種伺服器(SQL2016)。它最初是空白的,並且所有內容都已參數化。一切都在 Azure DevOps 中並部署到各個地方。

我想為幾個表包含/打包(主要是靜態的)配置**數據。**最初,我使用腳本嚮導為表格編寫腳本,然後將該腳本文本放入我的部署後文件 ( InitConfigs.PostDeployment1.sql)。

我遇到過一個配置表,在編寫腳本時,它是一個將近 600mb 的腳本。大小不是問題,只是似乎必須有一種適當/更好的方式將其嵌入到項目中。

我嘗試過的一些事情:

  • 導出到平面文件並以某種方式嵌入。- 看起來很亂,我必須想辦法在我的部署後腳本中導入它
  • 導出單表 bacpac - 似乎不起作用,因為它試圖包含整個數據庫
  • 使用腳本嚮導生成一個巨大的*.sql文件。- 我可以添加到項目中並使用 SQLCMD 進行引用:r。似乎很奇怪。

是否有某種數據包 dacpac/bacpac 樣式的文件可以很好地包裝所有內容並且可以輕鬆導入?也許也壓縮了?

您的直覺就在這裡 - 在原始碼控制中將 600 MB SQL 腳本作為 SSDT 項目的一部分並不常見。

特別是在分佈式版本控制系統(如 git)的世界中,您正在談論該文件在各種機器上可能存在的大量副本,並詳細跟踪它的歷史。

但是,正如您所注意到的,除了部署後腳本之外,沒有處理靜態數據的“內置”方式:

SQL SSDT 數據庫項目:原始碼控制查找數據

一種解決方案是創建一個一次性 SSDT 項目,它所擁有的只是您的配置數據腳本。然後,您可以從中生成一個 dacpac 文件(實際上只是一個壓縮文件夾),並在您的主項目中“引用”該 dacpac。

這種方法的優點是您獲得了一個壓縮的部署腳本,但它的格式很容易適合您現有的部署管道(而不是僅僅將腳本文件放入 .zip 存檔中)。

這就是它的樣子。

我有一個 SSDT 項目,其中包含 AdventureWorks 範例數據庫模式。生成的 dacpac 為 80 KB:

在此處輸入圖像描述

我將創建第二個項目,它只包含一個 Post Deploy 腳本,它引用了我的靜態配置數據腳本:

在此處輸入圖像描述

  • Post_Person.ContactType.sql 是一個 10 MB 的腳本文件,其中包含一堆插入語句
  • 它被配置為“建構操作”=“無”和“複製到輸出目錄”=“不複製”

這將生成一個 34 KB 的 dacpac 文件。

基於該壓縮率,這在很大程度上取決於您的數據,您的 600 MB 可以小到 2 MB(在這樣的腳本中有很多重複,這有助於進行良好的壓縮)。

然後,您可以在主 SSDT 項目中添加 dacpac 作為“數據庫參考”:

在此處輸入圖像描述

此時,您可以丟棄“InitScripts”項目。或者,您可以將其儲存在單獨的獨立儲存庫中,以防您需要更新和重新生成 dacpac。

請注意,最後,您的建構/部署過程將需要部署兩個 dacpac 文件 - 您的“主”文件和“InitScripts”文件,僅在初始設置時(或者您可以每次都部署它,並擁有初始化腳本在採取任何行動之前檢查現有數據)。

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/265475