適用於: SQL Server 2022 (16.x) 及後版本
Azure SQL Database Azure
SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
SQL 資料庫專案在本地端表示由 SQL 物件組成的某個資料庫的結構描述,這些物件包括資料表、預存程序或函式。 SQL 資料庫專案的開發週期可讓資料庫開發整合到持續整合和持續部署 (CI/CD) 工作流程中,成為開發的最佳做法。
Overview
SQL 專案以宣告式 T-SQL 陳述式為基礎。 在 SQL 資料庫專案程式碼中,您會將每個物件建立一次。 如果您需要變更該物件的相關內容,例如加入資料行或變更資料類型,可以修改第一次,也是唯一一次宣告該物件的單一檔案。
建置 SQL 資料庫專案時,輸出成品為 .dacpac 檔案。 新的和現有的資料庫可以透過將 .dacpac 發佈至目標資料庫來更新,以符合 .dacpac 的內容。
SQL 資料庫專案會圍繞您的資料庫程式碼來建置架構,將兩個基本功能新增至該組檔案及其建置程序:
SQL 資料庫專案的功能由 Microsoft.SqlServer.DacFx .NET 程式庫提供,並呈現在數個 SQL 開發工具中。 DacFx 有多個擴充點,例如修改部署步驟,以及建立程式碼分析自訂規則的能力。 適用於 SQL 專案的專案 SDK Microsoft.Build.Sql,建議用於新的開發,而且是適用於 Azure Data Studio 和 VS Code 的 SQL Database 專案延伸模組所使用的格式。 Visual Studio 中的 SDK 樣式 SQL 專案支援處於預覽狀態。
Validation
建置 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 資料夾中找到具有預設設定的建置。
Deployment
輸出檔案 .dacpac 功能強大、可重複使用,為宣告式成品。 憑藉此檔案,我們可以使用 SqlPackage 或其他工具,將資料庫程式碼套用至資料庫。 要部署 .dacpac 的命令是 SqlPackage 的 發佈 命令。
例如: sqlpackage /Action:Publish /SourceFile:yourfile.dacpac /TargetConnectionString:{yourconnectionstring} 。
新資料庫
SqlPackage 會瀏覽物件關聯性,以便在將 dacpac 發佈至新的資料庫時,以正確的順序建立每個物件。 例如,當 Table_B 有 Table_A 的外鍵時,SqlPackage 會先建立 Table_A,再建立 Table_B。
您不想執行整個資料夾的 SQL 指令碼,特別是當您可以使用 SQL 專案時,該專案會根據物件關聯性,以正確的順序自動執行每個 T-SQL 區段。
現有資料庫
除了在發佈至新資料庫時瀏覽物件階層圖之外,.dacpac 發佈程序也會先計算來源 .dacpac 與目標資料庫之間的差異,再判定更新該資料庫需要採取哪些步驟。 例如,如果 Table_C 在 SQL 專案中遺漏了兩個資料行,而且 StoredProcedure_A 已變更,SqlPackage 會建立 ALTER TABLE 陳述式和 ALTER PROCEDURE 陳述式,而不是盲目地嘗試建立一堆物件。
發佈命令提供給現有資料庫的彈性並不限於單一資料庫。 您可以多次部署一個 .dacpac,例如在升級百個資料庫的完整群組時。
使用時機
SQL 資料庫專案非常適合想要將資料庫開發整合到 CI/CD 工作流程的團隊。 SQL 專案的宣告性質允許資料庫結構描述的單一事實來源,而建置和發佈程序提供可重複且可靠的方式,可將變更部署至資料庫。
SQL 資料庫專案可用來追蹤資料庫狀態的真相來源,包括使用 EF Core 等物件關係式對應工具 (ORM) 進行開發。 圖形化工具或命令列可用來將資料庫的結構描述擷取至 SQL 專案,而不論用來建立資料庫的 ORM 為何。
SQL 資料庫專案支援 SQL Server 和 Azure SQL 系列資料庫,包括 Azure SQL 資料庫和 Azure Synapse Analytics。 無論您是開發應用程式或資料倉儲,SQL 資料庫專案都可以用來管理資料庫的結構描述。 您可以從 Visual Studio、VS Code 和 Azure Data Studio 中的工具開發 SQL 專案。
原始專案與 SDK 樣式專案
Microsoft.Build.Sql SDK 風格的專案格式基於 .NET Core 引入的新 SDK 風格專案,並用於 VS Code 的 SQL Database Projects 擴充套件以及利用在 Fabric 整合原始碼控制的 SQL 資料庫。 Microsoft.Build.Sql 專案會根據 MSBuild (.NET Framework) 取代原始的 SQL 專案格式。
備註
Visual Studio 2026 僅支援原始的 SQL 專案格式。 SDK 風格的 SQL 專案目前已在 Visual Studio 2022 預覽,並一般可在 VS Code 中取得。 了解更多關於 SQL 專案工具的資訊。
新的開發工作應考慮使用 Microsoft.Build.Sql 專案,因為 SDK 樣式專案是未來將支援的格式。 SDK 樣式的專案格式更具彈性,且包含原始 SQL 專案無法使用的新功能:
- .NET 8+ 支援(跨平台)
- 用於資料庫參考的 NuGet 套件參考
- 專案中 .sql 檔案的預設通配符模式
SDK 樣式專案具有來自原始 SQL 專案的超集功能,而現有的 SQL 專案可以透過修改專案檔轉換成 SDK 樣式專案。
功能覆蓋範圍的例外是支援 SQLCLR 物件,這類物件在原始與 SDK 風格的 SQL 專案中皆有支援,但需要 .NET Framework 架構。 包含 SQLCLR 物件的原始 SQL 專案可以轉換成 SDK 風格的專案,但該專案建置需要 .NET Framework 而非 .NET 版本。 建置具有 SQLCLR 物件的項目之後,.dacpac 就可以在 .NET 和 .NET Framework 上使用 SqlPackage 來部署,並可作為專案中的 .dacpac 參考(相同資料庫或相同的伺服器不同資料庫)。