教學課程:建立和部署 SQL 專案
適用於:Microsoft Fabric 中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 SQL 資料庫
SQL 資料庫專案的開發週期可讓資料庫開發整合到持續整合和持續部署 (CI/CD) 工作流程中,成為開發的最佳做法。 雖然可以手動完成 SQL 資料庫專案的部署,但建議使用部署管線來自動化部署程序,讓進行中的部署根據您持續的本機開發執行,而不需要額外的工作。
本文逐步說明如何建立新的 SQL 專案、將物件新增至專案,以及設定持續部署管線,以便使用 GitHub Actions 建置和部署專案。 本教學課程是 SQL 專案入門文章內容的超集。 雖然本教學課程會在 GitHub Actions 中實作部署管線,但相同的概念適用於 Azure DevOps、GitLab 以及其他自動化環境。
在本教學課程中,您已:
- 建立新的 SQL 專案
- 將物件新增至專案
- 在本機建置專案
- 將專案簽入原始檔控制
- 將專案建置步驟新增至持續部署管線
- 將
.dacpac
部署步驟新增至持續部署管線
如果您已完成 SQL 專案入門文章中的步驟,可以跳至步驟 4。 在本教學課程結束時,您的 SQL 專案會自動建置並部署到目標資料庫的變更。
必要條件
# install SqlPackage CLI
dotnet tool install -g Microsoft.SqlPackage
# install Microsoft.Build.Sql.Templates
dotnet new install Microsoft.Build.Sql.Templates
請確定您有下列項目,以完成 GitHub 中的管線設定:
注意
若要完成 SQL 資料庫專案的部署,您需要存取 Azure SQL 或 SQL Server 執行個體。 您可以在 Windows 或容器中使用 SQL Server 開發人員版本免費進行本機開發。
步驟 1:建立新的專案
我們會先建立新的 SQL 資料庫專案,再將物件手動新增其中,開始我們的專案。 還有其他方法可以建立專案,讓專案立即填入現有資料庫中的物件,例如使用結構描述比較工具。
依序選取 [檔案]、[新增],接著選取 [專案]。
在 [新增專案] 對話框中,選取搜尋框的條件 [SQL Server]。 熱門搜尋結果應該是 SQL Server 資料庫專案。
選取 [下一步] 繼續進行下一個步驟。 提供不需要符合資料庫名稱的專案名稱。 視需要驗證並修改專案位置。
選取 [建立] 以建立專案。 空白專案隨即開啟,並顯示在 [方案總管] 中以供編輯。
依序選取 [檔案]、[新增],接著選取 [專案]。
在 [新增專案] 對話框中,選取搜尋框的條件 [SQL Server]。 熱門搜尋結果應該是 SDK 樣式 SQL Server 資料庫專案 (預覽版)。
選取 [下一步] 繼續進行下一個步驟。 提供不需要符合資料庫名稱的專案名稱。 視需要驗證並修改專案位置。
選取 [建立] 以建立專案。 空白專案隨即開啟,並顯示在 [方案總管] 中以供編輯。
在 VS Code 或 Azure Data Studio 的 [資料庫專案] 檢視中,選取 [新專案] 按鈕。
第一個提示會決定要使用的專案範本,主要是根據目標平台是 SQL Server 還是 Azure SQL。 如果系統提示您選取特定版本的 SQL,請選擇符合目標資料庫的版本,但如果目標資料庫版本未知,請選擇最新版本,因為稍後可以修改該值。
在出現的文字輸入中輸入專案名稱,該名稱不需要與資料庫名稱相符。
在出現的 [選取資料夾] 對話方塊中,選取專案資料夾的目錄、.sqlproj
檔案,以及要存放在其中的其他內容。
當系統提示您是否建立 SDK 樣式專案 (預覽版) 時,請選取 [是]。
完成後,空白專案隨即開啟,並顯示在 [資料庫專案] 檢視中以供編輯。
安裝 Microsoft.Build.Sql 專案的 .NET 範本後,您可以從命令列建立新的 SQL 資料庫專案。 選項 -n
會指定專案的名稱,而選項 -tp
會指定專案目標平台。
使用選項 -h
來查看可用的選項。
# install Microsoft.Build.Sql.Templates
dotnet new sqlproject -n MyDatabaseProject
步驟 2:將物件新增至專案
在 [方案總管] 中,以滑鼠右鍵按一下專案節點並選取 [新增],然後選取 [資料表]。 [新增項目] 對話方塊隨即出現,您可以在其中指定資料表名稱。 選取 [新增] 以在 SQL 專案中建立資料表。
資料表會在 Visual Studio 資料表設計工具中開啟,其中包含範本資料表定義,您可以在其中新增資料行、索引和其他資料表屬性。 當您完成初始編輯時,請儲存檔案。
您可以透過 [新增專案] 對話方塊來新增更多資料庫物件,例如檢視、預存程序和函式。 以滑鼠右鍵按一下 [方案總管] 中的專案節點並選取 [新增],然後選取所需的物件類型,以存取對話方塊。 專案中的檔案可以透過 [新增] 下的 [新增資料夾] 選項,組織成資料夾。
在 [方案總管] 中,於專案節點上按一下滑鼠右鍵,然後依次選取 [新增]、[新增項目]。 [新增項目] 對話框隨即出現,選取 [顯示所有範本],然後選取 [資料表]。 將資料表名稱指定為檔案名稱,然後選取 [新增] 以在 SQL 專案中建立資料表。
資料表會在 Visual Studio 查詢編輯器中開啟,其中包含範本資料表定義,您可以在其中新增資料行、索引和其他資料表屬性。 當您完成初始編輯時,請儲存檔案。
您可以透過 [新增專案] 對話方塊來新增更多資料庫物件,例如檢視、預存程序和函式。 以滑鼠右鍵按一下 [方案總管] 中的專案節點並選取 [新增],然後在 [顯示所有範本] 後選取所需的物件類型。 專案中的檔案可以透過 [新增] 下的 [新增資料夾] 選項,組織成資料夾。
在 VS Code 或 Azure Data Studio 的 [資料庫專案] 檢視中,以滑鼠右鍵按一下專案節點,然後選取 [新增資料表]。 在出現的對話方塊中,指定資料表名稱。
資料表會在文字編輯器中開啟,其中包含範本資料表定義,您可以在其中新增資料行、索引和其他資料表屬性。 當您完成初始編輯時,請儲存檔案。
您可以透過專案節點上的特色選單來新增更多資料庫物件,例如檢視、預存程序和函式。 以滑鼠右鍵按一下 VS Code 或 Azure Data Studio 之 [資料庫專案] 檢視中的專案節點,然後按一下所需的物件類型,即可存取對話方塊。 專案中的檔案可以透過 [新增] 下的 [新增資料夾] 選項,組織成資料夾。
檔案可以藉由在專案目錄或巢狀資料夾中建立檔案,新增至專案。 檔案延伸模組應為 .sql
,建議依物件類型或結構描述和物件類型進行組織。
資料表的基底範本可用作在專案中建立新資料表物件的起點:
CREATE TABLE [dbo].[Table1]
(
[Id] INT NOT NULL PRIMARY KEY
)
步驟 3:建置專案
建置程序會根據專案檔中指定的目標平台,驗證物件與語法之間的關聯性。 建置程序的成品輸出是 .dacpac
檔案,可用來將專案部署到目標資料庫,並包含資料庫結構描述的編譯模型。
在 [方案總管]中,以滑鼠右鍵按一下專案節點,然後選取 [建置]。
輸出視窗會自動開啟以顯示建置程序。 若有有錯誤和警告,會顯示在 [輸出視窗] 中。 成功建置時,會建立組建成品 (.dacpac
檔案),其位置會包含在組建輸出中 (預設值為 bin\Debug\projectname.dacpac
)。
在 [方案總管]中,以滑鼠右鍵按一下專案節點,然後選取 [建置]。
輸出視窗會自動開啟以顯示建置程序。 若有有錯誤和警告,會顯示在 [輸出視窗] 中。 成功建置時,會建立組建成品 (.dacpac
檔案),其位置會包含在組建輸出中 (預設值為 bin\Debug\projectname.dacpac
)。
在 VS Code 或 Azure Data Studio 的 [資料庫專案] 檢視中,以滑鼠右鍵按一下專案節點,然後選取 [建置]。
輸出視窗會自動開啟以顯示建置程序。 若有有錯誤和警告,會顯示在 [輸出視窗] 中。 成功建置時,會建立組建成品 (.dacpac
檔案),其位置會包含在組建輸出中 (預設值為 bin/Debug/projectname.dacpac
)。
您可以使用 dotnet build
命令,從命令列建置 SQL 資料庫專案。
dotnet build
# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj
組建輸出包含任何錯誤或警告,以及發生錯誤或警告的特定檔案和行號。 成功建置時,會建立組建成品 (.dacpac
檔案),其位置會包含在組建輸出中 (預設值為 bin/Debug/projectname.dacpac
)。
步驟 4:將專案簽入原始檔控制
我們會將專案初始化為 Git 存放庫,並將專案檔提交至原始檔控制。 必須執行此步驟,才能讓專案與他人共用,並用於持續部署管線。
從 Visual Studio 中的 [Git] 功能表,選取 [建立 Git 存放庫]。
在 [建立 Git 存放庫] 對話方塊的 [推送至新的遠端] 區段底下,選擇 [GitHub]。
在 [建立 Git 存放庫] 對話方塊的 [建立新的 GitHub 存放庫] 區段中,輸入您要建立的存放庫名稱。 (如果您尚未登入 GitHub 帳戶,您也可以從此畫面執行此動作。)
在 [初始化本機 Git 存放庫] 底下,您應使用 [.gitignore 範本] 選項來指定您想要 Git 忽略的任何刻意未追蹤檔案。 若要深入了解 .gitignore,請參閱忽略檔案。 若要深入了解授權,請參閱授權存放庫。
登入並輸入存放庫資訊之後,請選取 [建立並推送] 按鈕,以建立您的存放庫並新增您的應用程式。
在 [方案總管] 中,以滑鼠右鍵按一下專案節點,然後選取 [發佈...]。
[發佈] 對話方塊隨即開啟,您可以在其中建立 [目標資料庫連線]。 如果您沒有用於部署的現有 SQL 執行個體,則 LocalDB ((localdb)\MSSQLLocalDB
) 會隨 Visual Studio 一起安裝,可用於測試和開發。
指定資料庫名稱,然後選取 [發佈],將專案部署至目標資料庫,或 [產生指令碼] 以產生指令碼,以便在執行之前檢閱。
您可以初始化本機存放庫,並從 VS Code 或 Azure Data Studio 直接發佈到 GitHub。 此動作會在 GitHub 帳戶上建立新的存放庫,並在單一步驟中將本機程式碼變更推送至遠端存放庫。
使用 VS Code 或 Azure Data Studio 中原始檔控制檢視中的 [發佈至 GitHub] 按鈕。 然後,系統會提示您指定存放庫的名稱和描述,以及是否將其設為公用或私人。
或者,您也可以遵循在 GitHub 上建立空白存放庫時提供的步驟,初始化本機存放庫,並將其推送至 GitHub。
在專案目錄中初始化新的 Git 存放庫,並將專案檔提交至原始檔控制。
git init
git add .
git commit -m "Initial commit"
在 GitHub 上建立新的存放庫,並將本機存放庫推送至遠端存放庫。
git remote add origin <repository-url>
git push -u origin main
步驟 5:將專案建置步驟新增至持續部署管線
SQL 專案是由 .NET 程式庫提供支援,因此會使用 dotnet build
命令來建置專案。 此命令是最基本的持續整合和持續部署 (CI/CD) 管線的標誌。 建置步驟可以新增至我們在 GitHub Actions 中建立的持續部署管線。
在存放庫根目錄中建立名為
.github/workflows
的新目錄。 此目錄將會包含定義持續部署管線的工作流程檔案。在
.github/workflows
目錄中,建立名稱為sqlproj-sample.yml
的新檔案。將下列內容新增至
sqlproj-sample.yml
檔案,編輯專案名稱,以符合專案的名稱和路徑:name: sqlproj-sample on: push: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Build run: dotnet build MyDatabaseProject.sqlproj
將工作流程檔案提交至存放庫,並將變更推送至遠端存放庫。
在 GitHub.com 上,瀏覽至存放庫的主頁面。 在您的存放庫名稱下,按下 [動作]。 在左側邊欄中,選取您剛建立的工作流程。 當您將工作流程檔案推送至存放庫時,工作流程最近的執行應當會出現在工作流程執行清單中。
如需建立第一個 GitHub Actions 工作流程的基本概念的詳細資訊,請參閱 GitHub Actions 快速入門。
步驟 6:將 .dacpac
部署步驟新增至持續部署管線
.dacpac
檔案中資料庫結構描述的編譯模型可以使用 SqlPackage
命令列工具或其他部署工具,部署到目標資料庫。 部署程序會決定更新目標資料庫的必要步驟,以符合 .dacpac
中所定義的結構描述,視需要根據資料庫中已經存在的物件來建立或改變物件。 例如,若要根據連接字串將 .dacpac
檔案部署到目標資料庫:
sqlpackage /Action:Publish /SourceFile:bin/Debug/MyDatabaseProject.dacpac /TargetConnectionString:{yourconnectionstring}
部署程序具有等冪性,即可以多次執行,而不會造成問題。 我們建立的管線會在每次將變更簽入存放庫的 main
分支時,建置和部署 SQL 專案。 除了直接在我們的部署管線中執行 SqlPackage
命令,我們可以使用部署工作來將命令抽象化並提供其他功能,例如記錄、錯誤處理和工作組態。 部署工作 GitHub sql-action 可以新增至 GitHub Actions 中的持續部署管線。
注意
從自動化環境執行部署需要設定資料庫和環境,讓部署可以觸達資料庫並進行驗證。 在 VM 中的 Azure SQL 資料庫或 SQL Server 中,這可能需要設定防火牆規則,以允許自動化環境連線到資料庫,並提供具有必要認證的連接字串。 GitHub sql-action 文件中提供指引。
開啟
.github/workflows
目錄中的sqlproj-sample.yml
檔案。在建置步驟之後,將下列步驟新增至
sqlproj-sample.yml
檔案:- name: Deploy uses: azure/sql-action@v2 with: connection-string: ${{ secrets.SQL_CONNECTION_STRING }} action: 'publish' path: 'bin/Debug/MyDatabaseProject.dacpac'
提交變更之前,請將祕密新增至包含目標資料庫連接字串的存放庫。 在 GitHub.com 上的存放庫中,瀏覽至 [設定],然後至 [祕密]。 選取 [新增存放庫祕密],並將名為
SQL_CONNECTION_STRING
且值為連接字串的祕密新增至目標資料庫。將變更從
sqlproj-sample.yml
提交至存放庫,並將變更推送至遠端存放庫。瀏覽回 GitHub.com 上的工作流程歷程記錄,然後選取工作流程的最新執行。 部署步驟應該會在工作流程執行的步驟清單中顯示,而工作流程會傳回成功碼。
透過連線至目標資料庫並檢查專案中的物件是否存在於資料庫中,以驗證部署。
透過在工作流程中建立環境關聯性,並在執行部署之前要求核准,以進一步保護 GitHub 部署。 如需有關環境保護和祕密保護的詳細資訊,請參閱 Github Actions 文件。