共用方式為


架構比較概觀

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric 中的 SQL 資料庫

結構描述比較工具可讓您比較兩個資料庫定義,其中比較的來源和目標可以是連接資料庫、SQL 資料庫專案或 .dacpac 檔案的任何組合。 比較完成後,比較的結果會顯示為一組動作,讓目標與來源相同。 資料庫模型之間的差異會以與原始檔控制差異類似的方式呈現。 如果架構比較目標是 SQL 專案或資料庫,您可以直接從架構比較介面更新目標,或產生具有相同效果的更新腳本。

封裝與資料庫之間差異的概念螢幕快照。

架構比較提供下列功能:

  • 比較兩個 .dacpac 檔案、資料庫或 SQL 專案之間的架構。
  • 將結果視為一組將目標與來源進行匹配的動作。
  • 選擇性排除結果中列出的動作。
  • 設定控制比較範圍的選項。
  • 直接將變更套用至目標,或產生腳本以在稍後套用變更。
  • 儲存比較。

Functionality

來源與目標之間的差異會顯示在方格中以方便檢閱。 您可以在衍生自下列任一選項的資料庫模型之間,以任一方向進行比較:

  • 連接的資料庫
  • SQL 資料庫專案
  • .dacpac 檔案

在架構比較中,您可以鑽研並檢閱結果方格或腳本表單中的每個差異,其中每個行層級都有變更的詳細數據。 您也可在更新目標之前選擇性地排除特定差異。 結構描述比較工具可在 Visual Studio、Azure Data Studio 和命令列中使用。

架構比較選項

結構描述比較的選項取自 DacFx .NET 程式庫所提供的部署選項。 這些選項包括:

  • 忽略空格
  • 忽略分割區方案
  • 忽略欄順序
  • 刪除不在來源中的索引
  • 防止可能的資料遺失

您也可以設定比較中包含的物件類型。 這些物件包括資料表、預存程序、索引、權限、使用者定義型別等等。

結構比較檔案

結構描述比較的比較定義可以儲存為 .scmp 檔案,稱為結構描述比較檔案。 此檔案會在 XML 中儲存結構描述比較的相關資訊,並包含:

  • 來源和目標連線資訊
  • 比較選項
  • 排除的物件類型

您可以在 Visual Studio 或 Azure Data Studio 中開啟 .scmp 檔案,以便稍後再次執行相同的比較,或與其他人共用比較。

啟動和使用結構描述比較

  1. 在 Visual Studio 的 [工具] 功能表中,選取 SQL Server,然後選取 [新增結構描述比較]

    或者,以滑鼠右鍵按一下 [方案總管] 中的 [TradeDev] 專案,再選取 [結構描述比較]。

    [結構描述比較] 視窗隨即開啟,Visual Studio 會自動為其指定 這類名稱。

    結構描述比較視窗工具列的正下方會出現兩個下拉式清單功能表,兩者中間有綠色箭頭。 這些功能表可讓您選取資料庫定義做為比較來源與目標。

  2. 在 [選取來源] 下拉式清單中,選擇 [選取來源]。[選取來源結構描述] 對話方塊隨即開啟。

    若您是以滑鼠右鍵按一下專案名稱來開啟 [結構描述比較] 視窗,則來源結構描述便已自行填入,因此您可以繼續進行步驟 4。

    Visual Studio 中 [結構描述比較來源選取] 對話方塊的螢幕擷取畫面。

  3. 選擇 [專案]、[資料庫] 連接 或 [.dacpac] 檔案,以完成結構描述比較來源的選取。 來源是您想要用來作為目標變更基礎的資料庫定義。

  4. 從 [結構描述比較] 視窗的 [選取目標] 下拉式清單中,選擇 [選取目標]。[選取目標結構描述] 對話方塊隨即開啟。 選擇 [專案]、[資料庫] 連接 或 [.dacpac] 檔案,以完成結構描述比較目標的選取。 目標是您要評估並可能套用變更的資料庫定義。

  5. 您也可以選取 [結構描述比較視窗] 工具列上的 [選項按鈕],指定要比較的物件、要忽略的差異類型及其他設定。

  6. 選取 [結構描述比較視窗] 工具列上的 [比較] 按鈕,開始進行比較程序。

    當比較完成時,視窗上半部的 [結果] 窗格會顯示專案與資料庫之間的結構差異。 比較結果群組所有差異預設會依動作分組(例如Delete、Change或Add)。 [c0]結果[/c0] 窗格會為每個在資料庫定義間有差異的資料庫物件顯示一列。 每一列將指出位於來源或目標結構描述 (或兩者) 中的物件,以及要讓目標物件與來源物件相同而即將對目標結構描述採取的動作。 如果某物件已重構並已重新命名或移至新的結構描述,其來源和目標名稱便有所不同,且來源名稱將顯示為粗體字型以醒目提示差異。

    Visual Studio 中結構描述比較介面的螢幕擷取畫面,其中將資料庫與專案進行比較。

    結果清單預設會隱藏在兩方結構描述中都相同的物件或是不支援更新的物件 (例如內建物件)。 您可以選取工具列上適當的篩選按鈕來顯示這些物件。

    若要變更群組偏好設定,請選取工具列中的 [群組結果] 下拉式清單。 選取 [類型] 以依據物件類型 (例如,依資料表、檢視或預存程序) 將結果分組。

  7. 根據預設,所有差異都會包括在 [更新目標] 動作的範圍內。 您可以排除任何不想要同步處理的差異。 若要這麼做,請取消勾選每一列中央 [動作] 欄內的勾選框。 或者,以滑鼠右鍵按一下 [結構描述] 窗格中的任一列,然後選取 [排除]。 該列隨即呈現灰色。使用結構描述比較來更新目標資料庫的時候,這一列的任何暫止變更都不會列入考慮。

    您也能以滑鼠右鍵按一下某個群組列,再選取 [全部排除] 或 [全部包含],這相當於取消選取或選取隸屬該群組的所有差異。 當您依架構分組結果時,以滑鼠右鍵按兩下群組數據列是包含或排除特定架構之所有變更的實用方式。

    如果排除的列有任何相依物件 (例如,[檢視] 列所參考的 [資料表] 列),將會停用該排除的列,但不會清除其核取方塊。 一旦取消勾選所有依賴該列的其他列,也會取消勾選該列。 此外,如果某一行已重構(重新命名或移動至其他結構描述),則會停用該行及其所有相依子行的核取方塊。

    如果您重新整理比較,則會忽略您選擇略過的差異。

更新目標的結構描述時可有兩種選項。 您可以直接從 [結構描述比較] 視窗更新目標 (若目標為資料庫或專案),或者產生更新指令碼 (若目標為資料庫或資料庫檔案)。 產生的指令碼會出現在 Transact-SQL 編輯器中,可讓您檢查該指令碼並對資料庫加以執行。

Note

在 Visual Studio 的 SDK 樣式 SQL 專案預覽中,部分提供圖形架構比較。 架構比較可以用於已連接的資料庫和.dacpac檔案,但 SQL 資料庫專案尚未提供。

  1. 在 Visual Studio 的 [工具] 功能表中,選取 SQL Server,然後選取 [新增結構描述比較]

    或者,以滑鼠右鍵按一下 [方案總管] 中的 [TradeDev] 專案,再選取 [結構描述比較]。

    [結構描述比較] 視窗隨即開啟,Visual Studio 會自動為其指定 這類名稱。

    結構描述比較視窗工具列的正下方會出現兩個下拉式清單功能表,兩者中間有綠色箭頭。 這些功能表可讓您選取資料庫定義做為比較來源與目標。

  2. 在 [選取來源] 下拉式清單中,選擇 [選取來源]。[選取來源結構描述] 對話方塊隨即開啟。

    若您是以滑鼠右鍵按一下專案名稱來開啟 [結構描述比較] 視窗,則來源結構描述便已自行填入,因此您可以繼續進行步驟 4。

    Visual Studio 中 [結構描述比較來源選取] 對話方塊的螢幕擷取畫面。

  3. 選擇 [專案]、[資料庫] 連接 或 [.dacpac] 檔案,以完成結構描述比較來源的選取。 來源是您想要用來作為目標變更基礎的資料庫定義。

  4. 從 [結構描述比較] 視窗的 [選取目標] 下拉式清單中,選擇 [選取目標]。[選取目標結構描述] 對話方塊隨即開啟。 選擇 [專案]、[資料庫] 連接 或 [.dacpac] 檔案,以完成結構描述比較目標的選取。 目標是您要評估並可能套用變更的資料庫定義。

  5. 您也可以選取 [結構描述比較視窗] 工具列上的 [選項按鈕],指定要比較的物件、要忽略的差異類型及其他設定。

  6. 選取 [結構描述比較視窗] 工具列上的 [比較] 按鈕,開始進行比較程序。

    當比較完成時,視窗上半部的 [結果] 窗格會顯示專案與資料庫之間的結構差異。 根據預設,比較結果會依動作 (例如 [刪除]、[變更] 或 [加入]) 將所有差異分組。 [c0]結果[/c0] 窗格會為每個在資料庫定義間有差異的資料庫物件顯示一列。 每一列將指出位於來源或目標結構描述 (或兩者) 中的物件,以及要讓目標物件與來源物件相同而即將對目標結構描述採取的動作。 如果某物件已重構並已重新命名或移至新的結構描述,其來源和目標名稱便有所不同,且來源名稱將顯示為粗體字型以醒目提示差異。

    Visual Studio 中結構描述比較介面的螢幕擷取畫面,其中將資料庫與專案進行比較。

    結果清單預設會隱藏在兩方結構描述中都相同的物件或是不支援更新的物件 (例如內建物件)。 您可以選取工具列上適當的篩選按鈕來顯示這些物件。

    若要變更群組偏好設定,請選取工具列中的 [群組結果] 下拉式清單。 選取 [類型] 以依據物件類型 (例如,依資料表、檢視或預存程序) 將結果分組。

  7. 根據預設,所有差異都會包括在 [更新目標] 動作的範圍內。 您可以排除任何不想要同步處理的差異。 若要這麼做,請取消勾選每一列中央 [動作] 欄內的勾選框。 或者,以滑鼠右鍵按一下 [結構描述] 窗格中的任一列,然後選取 [排除]。 該列隨即呈現灰色。使用結構描述比較來更新目標資料庫的時候,這一列的任何暫止變更都不會列入考慮。

    您也能以滑鼠右鍵按一下某個群組列,再選取 [全部排除] 或 [全部包含],這相當於取消選取或選取隸屬該群組的所有差異。 當您是依結構描述將結果分組時,即可利用此快捷方法包含或排除對特定結構描述所做的一切變更。

    如果排除的列有任何相依物件 (例如,[檢視] 列所參考的 [資料表] 列),將會停用該排除的列,但不會清除其核取方塊。 一旦取消勾選所有依賴該列的其他列,也會取消勾選該列。 此外,如果某一行已重構(重新命名或移動至其他結構描述),則會停用該行及其所有相依子行的核取方塊。

    如果您重新整理比較結果,那些您已選擇略過的差異會被忽略。

更新目標的結構描述時可有兩種選項。 您可以直接從 [結構描述比較] 視窗更新目標 (若目標為資料庫或專案),或者產生更新指令碼 (若目標為資料庫或資料庫檔案)。 產生的指令碼會出現在 Transact-SQL 編輯器中,可讓您檢查該指令碼並對資料庫加以執行。

如需 Visual Studio Code 中結構描述比較的深入資訊,請參閱結構描述比較一文

  1. 在 Visual Studio Code 的命令選項板 ()ctrl/cmd+shift+P 中,搜尋並選取 [MSSQL:結構描述比較]。

    或者,以滑鼠右鍵按一下 [資料庫專案] 檢視中的資料庫專案,或 [物件總管] 中的資料庫,然後選取 [結構描述比較]

    Visual Studio Code 物件總管中結構比較功能表項的截圖。

    架構比較 視窗開啟,且可能會根據啟動點預設來源或目標。

    架構比較視窗工具列的正下方會出現兩個省略號按鈕,其間有一個箭頭。 這些功能表可讓您選取資料庫定義做為比較來源與目標。

  2. 選取來源或目標的省略號按鈕會開啟一個對話方塊,其中每個對話框都可以更新。 選擇 [專案]、[資料庫] 連接 或 [.dacpac] 檔案,以完成結構描述比較來源的選取。 來源是您想要用來作為目標變更基礎的資料庫定義。 目標是您要評估並可能套用變更的資料庫定義。

    Visual Studio Code 中 [架構比較來源選取] 對話框的螢幕快照。

    選取完成後,請選取 [確定] 以關閉對話方塊,並傳回 [結構描述比較] 視窗。

  3. 您也可以選取 [結構描述比較視窗] 工具列上的 [選項按鈕],指定要比較的物件、要忽略的差異類型及其他設定。

  4. 選取 [結構描述比較視窗] 工具列上的 [比較] 按鈕,開始進行比較程序。

    當比較完成時,視窗上半部的 [結果] 窗格會顯示專案與資料庫之間的結構差異。 根據預設,比較結果會依動作 (例如 [刪除]、[變更] 或 [加入]) 將所有差異分組。 [c0]結果[/c0] 窗格會為每個在資料庫定義間有差異的資料庫物件顯示一列。 每一列將指出位於來源或目標結構描述 (或兩者) 中的物件,以及要讓目標物件與來源物件相同而即將對目標結構描述採取的動作。 如果某物件已重構並已重新命名或移至新的結構描述,其來源和目標名稱便有所不同,且來源名稱將顯示為粗體字型以醒目提示差異。

    Azure Data Studio 中結構描述比較介面的螢幕擷取畫面,其中將資料庫與專案進行比較。

  5. 根據預設,所有差異都會包括在 [更新目標] 動作的範圍內。 您可以排除任何不想要同步處理的差異。 若要這麼做,請取消勾選每一列中央 [動作] 欄內的勾選框。 當架構比較用來更新目標資料庫時,此數據列不會被視為任何暫止的變更。

    如果排除的列有任何相依物件 (例如,[檢視] 列所參考的 [資料表] 列),將會停用該排除的列,但不會清除其核取方塊。 一旦取消勾選所有依賴該列的其他列,也會取消勾選該列。 此外,如果某一行已重構(重新命名或移動至其他結構描述),則會停用該行及其所有相依子行的核取方塊。

    如果您重新整理比較結果,那些您已選擇略過的差異會被忽略。

更新目標的結構描述時可有兩種選項。 如果目標是資料庫或專案,您可以使用 [套用] 按鈕直接從 [結構描述比較] 視窗更新目標;如果目標是資料庫,可以使用 [產生指令碼] 按鈕產生更新指令碼。 產生的指令碼會出現在 Transact-SQL 編輯器中,可讓您檢查該指令碼並對資料庫加以執行。

架構比較需要圖形化工具,例如 Visual Studio 或 適用於 Visual Studio Code 的 MSSQL 擴充功能