分享方式:


什麼是 SQL 資料庫專案?

適用於:SQL Server 2022 (16.x) Azure SQL 資料庫 Azure SQL 受控執行個體

SQL 資料庫專案在本機代表組成單一資料庫結構描述的 SQL 物件,例如資料表、預存程序或函式。 SQL 資料庫專案的開發週期可讓資料庫開發整合到持續整合和持續部署 (CI/CD) 工作流程中,成為開發的最佳做法。

概觀

SQL 專案以宣告式 T-SQL 陳述式為基礎。 在 SQL 資料庫專案程式碼中,您會將每個物件建立一次。 如果您需要變更該物件的相關內容,例如加入資料行或變更資料類型,可以修改第一次,也是唯一一次宣告該物件的單一檔案。

建置 SQL 資料庫專案時,輸出成品為 .dacpac 檔案。 新的和現有的資料庫可以更新,藉由將 .dacpac 發佈至目標資料庫,以符合 .dacpac 的內容。

SQL 資料庫專案會圍繞您的資料庫程式碼來建置架構,將兩個基本功能新增至該組檔案及其建置程序:

  • 驗證物件與特定 SQL 版本語法之間的參考
  • 將組建成品部署至新的或現有的資料庫

包含預先部署和部署後指令碼以及資料庫物件的 SQL 資料庫專案的摘要螢幕擷取畫面。

SQL 資料庫專案的功能由 Microsoft.SqlServer.DacFx .NET 程式庫提供,並呈現在數個 SQL 開發工具中。 DacFx 有多個擴充點,例如修改部署步驟,以及建立程式碼分析自訂規則的能力。 適用於 SQL 專案的專案 SDK 是 Microsoft.Build.Sql,目前提供預覽版,並建議用於新的開發

驗證

建置 SQL 專案時,會驗證物件之間的關聯性。 例如,檢視定義不能包含 SQL 專案中不存在的資料表或資料行。

此外,SQL 專案在其 .sqlproj 檔案中包含名為 [目標平台] 的屬性。 這項資訊會在建置程序期間用來驗證函式和 T-SQL 語法是否存在於該版本的 SQL 中。 例如,在 SQL Server 2022 中新增的 JSON 函式不能用於設定為 Sql140 (SQL Server 2017) 目標平台的 SQL 專案中。

若要建置 SQL 專案,我們會從命令列執行 dotnet build。 在支援 SQL 專案 (Azure Data Studio、VS Code 和 Visual Studio) 的圖形化工具中,有一個功能表項目可建置 SQL 專案。

建置程序的主控台輸出可能包含錯誤 (建置失敗) 或警告。 建置警告可以在物件名稱和其他可自訂最佳做法中包含不一致的大小寫,但不會讓建置失敗。

建置程序的成品輸出是 .dacpac 檔案,您可以在 bin/Debug 資料夾中找到具有預設設定的建置。

部署

輸出檔案 .dacpac 功能強大、可重複使用,為宣告式成品。 憑藉此檔案,我們可以使用 SqlPackage 或其他工具,將資料庫程式碼套用至資料庫。 要部署 .dacpac 的 SqlPackage 命令是 [發佈] 命令。

從 SQL 專案建置到 dacpac 並部署至資料庫的程序概觀螢幕擷取畫面。

例如: sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring}

新增資料庫

SqlPackage 會瀏覽物件關聯性,以便在將 dacpac 發佈至新的資料庫時,以正確的順序建立每個物件。 例如,當 Table_B 有到 Table_A 的外鍵時,SqlPackage 會在 Table_B 之前建立 Table_A。

您不想執行整個資料夾的 SQL 指令碼,特別是當您可以使用 SQL 專案時,該專案會根據物件關聯性,以正確的順序自動執行每個 T-SQL 區段。

現有資料庫

除了在發佈至新資料庫時瀏覽物件階層圖之外,.dacpac 發佈程序也會先計算來源 .dacpac 與目標資料庫之間的差異,再判定更新該資料庫需要採取哪些步驟。 例如,如果 Table_C 在 SQL 專案中遺漏了兩個資料行,而且 StoredProcedure_A 已變更,SqlPackage 會建立 ALTER TABLE 陳述式和 ALTER PROCEDURE 陳述式,而不是盲目地嘗試建立一堆物件。

部署計算的範例 alter table 陳述式的螢幕擷取畫面。

發佈命令提供給現有資料庫的彈性並不限於單一資料庫。 您可以多次部署一個 .dacpac,例如在升級一百個資料庫的機群時。

使用時機

SQL 資料庫專案非常適合想要將資料庫開發整合到 CI/CD 工作流程的團隊。 SQL 專案的宣告性質允許資料庫結構描述的單一事實來源,而建置和發佈程序提供可重複且可靠的方式,可將變更部署至資料庫。

SQL 資料庫專案可用來追蹤資料庫狀態的真相來源,包括使用 EF Core 等物件關係式對應工具 (ORM) 進行開發。 圖形化工具或命令列可用來將資料庫的結構描述擷取至 SQL 專案,而不論用來建立資料庫的 ORM 為何。

AdventureWorks SQL 專案開啟時的 VS Code 螢幕擷取畫面,在編輯器中顯示資料表。

SQL 資料庫專案支援 SQL Server 和 Azure SQL 系列資料庫,包括 Azure SQL 資料庫和 Azure Synapse Analytics。 無論您是開發應用程式或資料倉儲,SQL 資料庫專案都可以用來管理資料庫的結構描述。 您可以從 Visual Studio、VS Code 和 Azure Data Studio 中的工具開發 SQL 專案。

原始專案與 SDK 樣式專案 (預覽版)

原始 SQL 專案格式以 MSBuild (.NET Framework) 為基礎,也是 Visual Studio 中 SQL Server Data Tools 所使用的格式。 SDK 樣式專案格式以 .NET Core 中引進的新 SDK 樣式專案為基礎,也是適用於 Azure Data Studio 和 VS Code 的 SQL 資料庫專案延伸模組所使用的格式。 Visual Studio 中的 SDK 樣式 SQL 專案的支援已列入藍圖

新的開發工作應考慮使用 SDK 樣式的專案格式,因為這是未來將支援的格式。 SDK 樣式的專案格式更具彈性,且包含原始 SQL 專案無法使用的新功能:

  • .NET 8 支援 (跨平台)
  • 資料庫參考的 NuGet 套件參考
  • 專案中.sql 檔案的預設萬用字元模式

SDK 樣式專案具有來自原始 SQL 專案的超集功能,而現有的 SQL 專案可以透過修改專案檔轉換成 SDK 樣式專案。 功能涵蓋範圍的例外狀況是支援 SQLCLR 物件,這些物件需要 .NET Framework,而且在 SDK 樣式專案中不受支援。