結構描述比較概觀
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
結構描述比較工具可讓您比較兩個資料庫定義,其中比較的來源和目標可以是連接資料庫、SQL 資料庫專案或 .dacpac
檔案的任何組合。 比較完成後,比較的結果會顯示為一組動作,讓目標與來源保持一致,與原始檔控制的差異類似。 從結構描述比較介面,您就可以直接更新目標 (若目標為專案或資料庫) 或產生具有相同效果的更新指令碼。
結構描述比較提供下列功能:
- 比較兩個 dacpac 檔案、資料庫或 SQL 專案之間的結構描述。
- 以要針對目標採取的動作集來檢視結果,以比對來源。
- 選擇性排除結果中列出的動作。
- 設定控制比較範圍的選項。
- 將變更直接套用至目標,或產生指令碼以便稍後套用變更。
- 儲存比較。
功能
來源與目標之間的差異會顯示在方格中以方便檢閱。 您可以在衍生自下列任一項的資料庫模型之間,從任一方向進行比較:
- 連線的資料庫
- SQL 資料庫專案
.dacpac
檔案
在結構描述比較中,您可以在結果方格中或以指令碼形式鑽研並檢閱每個差異,其中每個行層級都有變更的詳細資料。 您也可在更新目標之前選擇性地排除特定差異。 結構描述比較工具可在 Visual Studio、Azure Data Studio 和命令列中使用。
結構描述比較選項
結構描述比較的選項取自 DacFx .NET 程式庫所提供的部署選項。 這些選項包括:
- 略過空白字元
- 略過資料分割配置
- 略過資料行順序
- 卸除不在來源中的索引
- 封鎖可能的資料遺失
您也可以設定比較中包含的物件類型。 這些物件包括資料表、預存程序、索引、權限、使用者定義型別等等。
結構描述比較檔
結構描述比較的比較定義可以儲存為 .scmp
檔案,稱為結構描述比較檔案。 此檔案會在 XML 中儲存結構描述比較的相關資訊,並包含:
- 來源和目標連線資訊
- 比較選項
- 排除的物件類型
您可以在 Visual Studio 或 Azure Data Studio 中開啟 .scmp
檔案,以便稍後再次執行相同的比較,或與其他人共用比較。
啟動和使用結構描述比較
在 Visual Studio 的 [工具] 功能表中,選取 SQL Server,然後選取 [新增結構描述比較]。
或者,以滑鼠右鍵按一下 [方案總管] 中的 [TradeDev] 專案,再選取 [結構描述比較]。
[結構描述比較] 視窗隨即開啟,Visual Studio 會自動為其指定
SqlSchemaCompare1
這類名稱。結構描述比較視窗工具列的正下方會出現兩個下拉式清單功能表,兩者中間有綠色箭頭。 這些功能表可讓您選取資料庫定義做為比較來源與目標。
在 [選取來源] 下拉式清單中,選擇 [選取來源]。[選取來源結構描述] 對話方塊隨即開啟。
若您是以滑鼠右鍵按一下專案名稱來開啟 [結構描述比較] 視窗,則來源結構描述便已自行填入,因此您可以繼續進行步驟 4。
選擇 [專案]、[資料庫] 連接 或 [.dacpac] 檔案,以完成結構描述比較來源的選取。 來源是您想要用來作為目標變更基礎的資料庫定義。
從 [結構描述比較] 視窗的 [選取目標] 下拉式清單中,選擇 [選取目標]。[選取目標結構描述] 對話方塊隨即開啟。 選擇 [專案]、[資料庫] 連接 或 [.dacpac] 檔案,以完成結構描述比較目標的選取。 目標是您要評估並可能套用變更的資料庫定義。
您也可以選取 [結構描述比較視窗] 工具列上的 [選項按鈕],指定要比較的物件、要忽略的差異類型及其他設定。
選取 [結構描述比較視窗] 工具列上的 [比較] 按鈕,開始進行比較程序。
當比較完成時,視窗上半部的 [結果] 窗格會顯示專案與資料庫之間的結構差異。 根據預設,比較結果會依動作 (例如 [刪除]、[變更] 或 [加入]) 將所有差異分組。 [結果] 窗格會為每個有不同資料庫定義的資料庫物件各顯示一列。 每一列將指出位於來源或目標結構描述 (或兩者) 中的物件,以及要讓目標物件與來源物件相同而即將對目標結構描述採取的動作。 如果某物件已重構並已重新命名或移至新的結構描述,其來源和目標名稱便有所不同,且來源名稱將顯示為粗體字型以醒目提示差異。
結果清單預設會隱藏在兩方結構描述中都相同的物件或是不支援更新的物件 (例如內建物件)。 您可以選取工具列上適當的篩選按鈕來顯示這些物件。
若要變更群組偏好設定,請選取工具列中的 [群組結果] 下拉式清單。 選取 [類型] 以依據物件類型 (例如,依資料表、檢視或預存程序) 將結果分組。
根據預設,所有差異都會包括在 [更新目標] 動作的範圍內。 您可以排除任何不想要同步處理的差異。 若要這麼做,請取消選取每一列中央 [動作] 欄內的方塊。 或者,以滑鼠右鍵按一下 [結構描述] 窗格中的任一列,然後選取 [排除]。 該列隨即呈現灰色。使用結構描述比較來更新目標資料庫的時候,這一列的任何暫止變更都不會列入考慮。
您也能以滑鼠右鍵按一下某個群組列,再選取 [全部排除] 或 [全部包含],這相當於取消選取或選取隸屬該群組的所有差異。 當您是依結構描述將結果分組時,即可利用此快捷方法包含或排除對特定結構描述所做的一切變更。
如果排除的列有任何相依物件 (例如,[檢視] 列所參考的 [資料表] 列),將會停用該排除的列,但不會清除其核取方塊。 只有取消選取相依於該列的所有各列後,才會取消選取該列。 此外,如果某一列已重構 (重新命名或移至其他結構描述),則會停用該列及其所有相依子列的核取方塊。
如果您重新整理比較結果,那些您已選擇略過的差異會被忽略。
更新目標的結構描述時可有兩種選項。 您可以直接從 [結構描述比較] 視窗更新目標 (若目標為資料庫或專案),或者產生更新指令碼 (若目標為資料庫或資料庫檔案)。 產生的指令碼會出現在 Transact-SQL 編輯器中,可讓您檢查該指令碼並對資料庫加以執行。
Visual Studio 中,SDK 樣式 SQL 專案 (預覽版) 中尚不提供圖形架構比較。 使用 Azure Data Studio 來比較結構描述。
注意
Visual Studio Code 中無法使用結構描述比較。 使用 Azure Data Studio 或 Visual Studio 來比較結構描述。
在命令選擇區 (
ctrl/cmd+shift+P
) 的 Azure Data Studio 中,搜尋並選取 [結構描述比較]。或者,以滑鼠右鍵按一下 [資料庫專案] 檢視中的資料庫專案,或 [物件總管] 中的資料庫,然後選取 [結構描述比較]。
[結構描述比較] 視窗隨即開啟,而且可能會根據啟動點預設來源或目標。
[結構描述比較] 視窗工具列的正下方會出現兩個省略符號按鈕,兩者中間有箭頭。 這些功能表可讓您選取資料庫定義做為比較來源與目標。
選取來源或目標的省略符號按鈕會開啟對話方塊,可以在其中更新任一個或兩個都更新。 選擇 [專案]、[資料庫] 連接 或 [.dacpac] 檔案,以完成結構描述比較來源的選取。 來源是您想要用來作為目標變更基礎的資料庫定義。 目標是您要評估並可能套用變更的資料庫定義。
選取完成後,請選取 [確定] 以關閉對話方塊,並傳回 [結構描述比較] 視窗。
您也可以選取 [結構描述比較視窗] 工具列上的 [選項按鈕],指定要比較的物件、要忽略的差異類型及其他設定。
選取 [結構描述比較視窗] 工具列上的 [比較] 按鈕,開始進行比較程序。
當比較完成時,視窗上半部的 [結果] 窗格會顯示專案與資料庫之間的結構差異。 根據預設,比較結果會依動作 (例如 [刪除]、[變更] 或 [加入]) 將所有差異分組。 [結果] 窗格會為每個有不同資料庫定義的資料庫物件各顯示一列。 每一列將指出位於來源或目標結構描述 (或兩者) 中的物件,以及要讓目標物件與來源物件相同而即將對目標結構描述採取的動作。 如果某物件已重構並已重新命名或移至新的結構描述,其來源和目標名稱便有所不同,且來源名稱將顯示為粗體字型以醒目提示差異。
根據預設,所有差異都會包括在 [更新目標] 動作的範圍內。 您可以排除任何不想要同步處理的差異。 若要這麼做,請取消選取每一列中央 [動作] 欄內的方塊。 或者,以滑鼠右鍵按一下 [結構描述] 窗格中的任一列,然後選取 [排除]。 該列隨即呈現灰色。使用結構描述比較來更新目標資料庫的時候,這一列的任何暫止變更都不會列入考慮。
您也能以滑鼠右鍵按一下某個群組列,再選取 [全部排除] 或 [全部包含],這相當於取消選取或選取隸屬該群組的所有差異。 當您是依結構描述將結果分組時,即可利用此快捷方法包含或排除對特定結構描述所做的一切變更。
如果排除的列有任何相依物件 (例如,[檢視] 列所參考的 [資料表] 列),將會停用該排除的列,但不會清除其核取方塊。 只有取消選取相依於該列的所有各列後,才會取消選取該列。 此外,如果某一列已重構 (重新命名或移至其他結構描述),則會停用該列及其所有相依子列的核取方塊。
如果您重新整理比較結果,那些您已選擇略過的差異將被忽略。
更新目標的結構描述時可有兩種選項。 如果目標是資料庫或專案,您可以使用 [套用] 按鈕直接從 [結構描述比較] 視窗更新目標;如果目標是資料庫,可以使用 [產生指令碼] 按鈕產生更新指令碼。 產生的指令碼會出現在 Transact-SQL 編輯器中,可讓您檢查該指令碼並對資料庫加以執行。
結構描述比較需要圖形化工具,例如 Visual Studio 或 Azure Data Studio。