共用方式為


比較和同步處理資料庫結構描述

更新:2010 年 6 月

這個主題適用於:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

標題適用於 標題適用於 標題不適用於 標題不適用於

您可以使用 Visual Studio Premium 或 Visual Studio Ultimate 來比較「目標」(Target) 結構描述與「來源」(Source) 結構描述。 您可以針對每個差異,指定是否要更新目標,使其符合來源。 您可以將這些更新直接寫入目標,也可以將更新指令碼匯出至 Transact-SQL 編輯器或檔案。 您也可以將比較儲存成資料庫專案或獨立檔案的一部分。 透過儲存比較,您就可以更輕鬆地重複它們或重新同步處理相同的來源與目標。

結構描述比較的類型

您可以比較下列包含資料庫結構描述定義的實體:

  • SQL Server 資料庫 - 在 SQL Server 2008 或 SQL Server 2005 執行個體上執行的資料庫

  • 資料庫專案 - 包含 SQL Server 2008 或 SQL Server 2005 資料庫定義並在建置時產生 .dbschema 檔案的專案

  • 伺服器專案 - 包含伺服器物件定義以及 SQL Server 2008 或 SQL Server 2005 伺服器上 'master' 資料庫物件定義並在建置時產生 .dbschema 檔案的專案

  • 資料層應用程式元件 (DAC) 專案 - 在建置時產生 .dacpac 檔案的專案

  • .dbschema 檔案 - 當您建置資料庫或伺服器專案時的輸出

  • .dacpac 檔案 - 當您建置資料層應用程式元件 (DAC) 專案時的輸出

下表顯示您可以比較的結構描述型別,以及您是否能將更新寫入目標:

來源縱向、

目標橫向

SQL Server 資料庫

資料庫專案

.dbschema 檔案

伺服器專案

DAC 專案

.dacpac 檔案

SQL Server 資料庫

比較 + 更新

比較 + 更新

比較

比較 + 更新

比較

比較

資料庫專案

比較 + 更新

比較 + 更新

比較

.dbschema 檔案

比較 + 更新

比較 + 更新

比較

比較 + 更新

伺服器專案

比較 + 更新

比較

比較 + 更新

DAC 專案

比較

比較 + 更新

比較

.dacpac 檔案

比較

比較 + 更新

比較

若要閱讀此資料表,請在最左邊的資料行中找出來源結構描述的資料列。 接著,請在頂端的資料列中找出目標結構描述的資料行。 該資料行和資料列的交集就會提供有關您只能比較來源與目標,還是可以先比較,然後選擇性地更新目標結構描述的資訊。

您無法將伺服器結構描述與資料庫結構描述相比較,或將資料庫結構描述與伺服器結構描述相比較。 這包括採用 .dbschema 檔案格式的結構描述。 例如,您可以將伺服器專案與根據伺服器專案所建立的 .dbschema 檔案相比較。

只有當兩個資料庫專案包含在 Visual Studio 的相同方案中時,您才能比較它們。

警告

雖然您可以比較來源資料庫與目標「資料庫專案」(Database Project) (.dbproj),不過應該改為變更資料庫專案,並將這些變更部署至資料庫。 當您變更專案 (.dbproj),然後部署它時,就會降低您的變更與另一位小組成員所做變更發生衝突的風險,因為此專案在版本控制之下。

更新資料庫結構描述時防止資料遺失

當您使用 [結構描述比較] 來更新資料庫結構描述時,可能會導致資料遺失。 為了避免資料遺失,請務必格外注意來源和目標中的物件名稱,特別是在更新目標中的結構描述之前。

例如,您可能會在來源資料庫中,將某個資料表從 Order_Details 重新命名為 OrderDetails,但沒有在目標資料庫中這樣做,然後比較這兩個資料庫。 同步處理它們之前,這兩個資料表中的資料是完全相同的。 不過,當您將更新目標時,就會刪除 Order_Details 資料表,然後建立 OrderDetails 資料表。 此時,您可能會遺失 Order_Details 資料表中的所有資料。

若要協助防止資料遺失,您可以開啟 [工具] 功能表、按一下 [選項],然後選取 [如果可能遺失資料,即封鎖結構描述更新] 核取方塊。 此外,請務必先備份資料庫,然後再將更新寫入資料庫。 當您比較結構描述時,也可以指定比較的選項。 如需詳細資訊,請參閱 HOW TO:設定用來比較資料庫結構描述的選項

重要事項重要事項

如果您使用重構來重新命名資料庫專案中的物件,重構記錄也有助於在您建置和部署資料庫時防止資料遺失。 這個記錄會保留您變更的意圖。 例如,資料表可以就地重新命名。

結構描述比較與累加部署之間的差異

當您將更新部署至現有的資料庫時,這個程序非常類似於使用 [結構描述比較] 來同步處理兩個資料庫結構描述的程序。 不過,[結構描述比較] 具有一項重要差異:根據預設,[結構描述比較] 會忽略擴充的屬性。

如果您不想要忽略擴充的屬性和權限,可以針對所有 [結構描述比較] 工作階段或目前的工作階段,變更 [結構描述比較] 的選項。 如需詳細資訊,請參閱 HOW TO:設定用來比較資料庫結構描述的選項

一般工作

下表列出支援此案例之一般工作的說明,以及詳細資訊的連結,這些資訊可幫助您成功完成這些工作。

一般工作

支援內容

獲得實務練習:您可以執行入門逐步解說,熟悉如何比較兩個資料庫或比較資料庫與專案 (.dbproj)。

逐步解說:比較兩個資料庫的結構描述

逐步解說:比較資料庫與資料庫專案的結構描述

設定選項來控制如何比較結構描述:您可以設定控制如何比較結構描述的詳細資料。 您可以忽略特定類型的差異,例如空白字元、檔案群組和註解。 您也可以忽略物件的分類,例如使用者或登入。 您可以指定控制產生更新指令碼的選項。

HOW TO:設定用來比較資料庫結構描述的選項

比較資料庫或伺服器物件並選擇性更新目標以符合來源:您可以指定要比較的來源和目標結構描述,然後結果就會顯示在 [結構描述比較] 視窗中。 您可以檢視差異的詳細資料以及可用來同步處理資料庫的更新指令碼。 您可以將每個結構描述比較儲存至專案或獨立的 .scmp 檔案。 您可以針對來源與目標結構描述之間的每個差異指定動作,然後將更新寫入目標。 您也可以將更新指令碼匯出至 Transact-SQL 編輯器或檔案,以便在將變更套用至目標之前檢閱它。

HOW TO:比較資料庫結構描述

了解結構描述比較結果

疑難排解問題:您可以深入了解如何疑難排解比較和同步處理資料庫結構描述時可能遇到的常見問題。

結構描述比較問題疑難排解

了解結構描述比較結果

[結構描述比較] 視窗會針對每個比較的物件顯示四個資料行。 下表將描述每個資料行的內容。

資料行

狀態

  • 相等 - 在來源結構描述與目標結構描述中,此物件具有相同的定義而且包含相同的物件。

  • 新增 - 此物件存在來源結構描述中,但不存在目標結構描述中。

  • 遺漏 - 此物件存在目標結構描述中,但不存在來源結構描述中。

  • 不同定義 - 在來源結構描述與目標結構描述中,此物件具有不同的定義。

  • 不同相依性 - 在來源結構描述與目標結構描述中,此物件具有相同的定義但包含不同的物件。

例如,您可能會在來源結構描述中變更資料表定義,但沒有在目標結構描述中這樣做,然後比較它們。 這些資料表會標示為 [不同定義],而且包含這些資料表的結構描述則標示為 [不同相依性]。

SourceName (來源 {專案、資料庫或專案檔 (.dbschema)})

您所比較之來源專案、資料庫或專案檔的名稱。

更新動作

  • 略過 - 此物件不會在目標結構描述中更新。 如果此物件具有已變更的相依性,其圖示將指出您應該展開這個資料列,以便查看不同的參考物件。

  • 略過參考 - 此物件存在參考的資料庫中,而且不需要卸除或建立。

  • 建立 - 當您寫入更新或執行更新指令碼時,將會建立此物件。

  • 更新 - 當您寫入更新或執行更新指令碼時,此物件定義將會更新以符合來源結構描述。

  • 卸除 - 當您寫入更新或執行更新指令碼時,將會從目標結構描述中移除此物件。

注意事項注意事項
預設動作是由狀態所決定。若為「相等」物件,預設動作為「略過」,而且您無法加以變更。若為「新增」物件,預設動作為「建立」,但是您可以指定「略過」。若為「遺漏」物件,預設動作為「卸除」,但是您可以指定「略過」。若為「不同定義」,預設動作為「更新」,但是您可以指定「略過」。若為「不同物件」,預設動作為「略過」,而且您無法加以變更 (在這種情況下,雖然物件相等,不過它包含新增、遺漏或變更的物件)。

TargetName (目標 {專案、資料庫或專案檔 (.dbschema)})

您所比較之目標專案、資料庫或專案檔的名稱。

相關案例

變更記錄

日期

記錄

原因

2010 年 6 月

加入有關如何閱讀本主題中第一個資料表的資訊以處理客戶回函。

客戶回函。

2010 年 8 月

已釐清只有當專案包含在相同方案中時,才能比較它們。

客戶回函。