共用方式為


比較資料庫結構描述概觀

更新:2007 年 11 月

您可以使用 Visual Studio Team System Database 版比較兩個資料庫的「結構描述」(Schema),然後決定要將「來源」(Source) 的部分或所有結構描述物件套用至「目標」(Target)。如需範例案例,請參閱為什麼要比較資料庫結構描述?

您可以比較下列項目的結構描述:

  • 兩個資料庫,其中包含相同資料庫的兩個版本

  • Visual Studio 資料庫專案與資料庫

當您設定比較時,會使用 [結構描述比較] 對話方塊指定來源和目標。如需詳細資訊,請參閱 HOW TO:比較兩個資料庫的結構描述

在結構描述比較完成之後,會顯示比較結果供您檢視。如需詳細資訊,請參閱 HOW TO:檢視結構描述差異。您接著可以將來源的結構描述項目傳播至目標。如需詳細資訊,請參閱 HOW TO:同步處理資料庫結構描述

為什麼要比較資料庫結構描述?

下面的案例將說明需要比較資料庫結構描述的一種情況。在此例中,您會比較資料庫與資料庫專案,而不是比較兩個資料庫。

小組資料庫開發

您是資料庫開發人員,目前正使用 Database 版資料庫專案來建立資料庫。在開發的過程中,您的小組連續建立了資料庫的多個版本,並將這些版本部署到測試伺服器。小組的其他成員也參與資料庫的設計。

您剛完成了資料庫結構描述的變更,而且已在自己的電腦上測試過變更。由於沒有發現錯誤,這時就想將更新發佈至測試伺服器,讓小組的品管人員測試更新。

您開啟資料庫專案,然後使用 [新增結構描述比較] 對話方塊連接到測試伺服器。接下來將專案 (來源) 與已部署的資料庫 (目標) 比較,發現兩者有許多物件不同。但是您也發現,大部分的差異都存在於不是由您負責的物件中。其他人做了變更,而您不想要覆寫這些變更。

這時,您只要選取自己處理的物件,然後按一下 [寫入更新]。這個動作會更新您的資料庫部分,其他部分則保持不變。現在您的成果便已部署並準備好測試。

下節將說明 Team Edition for Database Professionals 如何顯示已變更的結構描述物件,並協助您決定要採取什麼動作。

控制結構描述比較

您可以指定選項,以兩種層次控制結構描述比較程序和指令碼產生程序。若要全域設定選項,請開啟 [工具] 功能表,按一下 [選項],然後展開 [資料庫工具],再按一下 [結構描述比較]。全域設定的選項會影響所有後續的結構描述比較作業,除非針對特定比較覆寫這些設定。

結構描述比較檢視

在比較兩個結構描述之後,[結構描述比較] 視窗會在方格中顯示結果。這個視窗也會顯示資料庫中物件的相關資訊,包括同步處理物件的指令碼。

  • 了解結構描述比較結果

  • 檢視物件定義

  • 預覽更新指令碼

了解結構描述比較結果

[結構描述比較] 視窗會顯示在 Visual Studio 的主要編輯區域。這個視窗會顯示兩個結構描述中的所有物件,以可展開的資料夾分類。這些物件包括資料表、檢視、預存程序、函式、使用者定義型別、規則、預設值、全文檢索目錄、使用者和角色。

在這個視窗中,資料行會顯示每個物件的下列資訊:

  • 第一個資料行是 [狀態],會顯示比較物件的比較狀態:

    • 相等。來源和目標物件的結構相同。

    • 不同。目標和來源物件的結構不同。

    • 遺漏。物件存在於目標中,但不在來源中。

    • 新增。物件存在於來源中,但不在目標中。

    注意事項:

    在判斷物件相等或不同時,會視您所設定的結構描述比較選項而定。如需詳細資訊,請參閱控制結構描述比較。

  • 第二個資料行會列出來源結構描述物件的名稱,並依物件類型分為幾個階層。在這個資料行中,您可以展開和摺疊節點,只顯示要檢視的物件類型。

  • 第三個資料行是 [更新動作],會顯示在兩個結構描述之間同步處理特定物件結構的動作 (變更只會寫入至目標)。[更新動作] 資料行中的值會與 [狀態] 資料行中的值對應。每個物件都可以選擇 [略過] 動作,讓目標中的物件保留比較前的狀態。但如果選取了 [包含相依性] 核取方塊,就無法 [略過] 更新 (若要查看這個核取方塊的狀態,請開啟 [工具] 功能表,再按一下 [選項])。例如,假設來源資料庫包含新的資料表,其中有索引、索引鍵和觸發程序,那麼如果加入了索引、索引鍵和觸發程序,就無法略過資料表。

    注意事項:

    變更 [更新動作] 資料行中的值,實際上是變更將執行的更新指令碼。也就是說,這會變更按一下 [寫入更新] 之後出現的結果。如需詳細資訊,請參閱 HOW TO:同步處理資料庫結構描述

    下表將摘要說明這些動作:

比較狀態

可選擇的更新動作 (預設值會以粗體顯示)。

預設動作的描述

等於

略過

[略過] 是物件相等時的預設動作,保持物件不變。

不同

更新、略過

[更新] 是物件不相等時的預設動作,會變更目標資料庫中物件的結構。例如,[更新] 動作可能會加入、刪除或重新命名資料表中的資料行。

遺漏

卸除、略過

[卸除] 是物件不存在於來源資料庫時的預設動作,會刪除目標資料庫中的物件。

新增

建立、略過

[建立] 是物件不存在於目標資料庫時的預設動作,會在目標資料庫中建立物件。

  • 第四個資料行會列出目標結構描述物件的名稱。

檢視物件定義

您也可以針對 [結構描述比較] 視窗中所列的每個資料庫物件檢視其 SQL 定義。當您在主文件視窗中按一下物件的資料列,物件定義就會以唯讀形式出現在 [物件定義] 窗格中。[物件定義] 窗格左側會顯示選取物件在來源中的定義,右側則會顯示物件在目標中的定義。您可以使用兩側的捲軸,同步捲動瀏覽兩邊的定義。來源與目標物件定義不同的行會反白顯示。

物件定義會反映出物件在執行比較當時的狀態。當您變更 [更新動作] 資料行中的值時,或物件在這個結構描述比較工作階段以外變更,物件定義並不會變更。

預覽更新指令碼

比較結構描述也會自動產生同步指令碼,並顯示在 [結構描述更新指令碼] 視窗中。這個「資料定義語言」(Data Definition Language,DDL) 指令碼會用來更新目標。指令碼只包含比較狀態為 [更新]、[卸除] 或 [建立] 的物件。要略過的項目不會出現在 [結構描述更新指令碼] 視窗中。

當您變更 [更新動作] 資料行中的值時,[結構描述更新指令碼] 視窗會反映您所做的變更。

注意事項:

更新 [指令碼預覽] 窗格的內容可能需要數秒的時間,會視您在 [更新動作] 資料行中所做的變更程度而定。

雖然您可以變更更新動作來變更資料定義語言 (DDL) 指令碼,但不能直接在這個視窗中編輯指令碼,因為 [指令碼預覽] 窗格是唯讀的。如果要編輯更新指令碼,請按一下 [匯出至編輯器],然後在 Transact-SQL (T-SQL) 編輯器中修改更新指令碼。

重新整理比較結果

您可以更新來源與目標結構描述差異的檢視。在一比較完來源和目標時,您可能會想重新整理檢視,查看其中一個結構描述或兩者是否變更。如果變更了結構描述比較選項,也可能會想重新整理結果。當您按一下 [重新整理] 時,會重複使用您先前指定的組態資訊來產生新的比較資料。

由於自最近結構描述比較以來,來源可能會加入或刪除資料庫物件,因此,當您按一下 [重新整理] 時,[結構描述比較] 會視需要試著在新的比較加入新增物件並移除刪除的物件。不過,如果您變更了特定物件的 [更新動作] 設定,該設定會保留,而不管物件自最近結構描述比較以來做了哪些變更。

安全地傳播資料庫結構描述

散佈資料庫結構描述可能會導致資料遺失。為避免這種情況發生,請務必注意來源和目標中的物件名稱,特別是在更新目標中的結構描述之前。

例如,您的目標包含名為 Order_Details 的資料表。在來源資料庫中,您將該資料表重新命名為 Order Details,把底線去掉。接著將比較兩個資料庫。在將來源的結構描述傳播至目標之前,兩個資料表中的資料相同。但是,當您將結構描述更新寫入至目標時,就會刪除 Order_Details 資料表,然後建立新的 Order Details 資料表。Order_Details 資料表中的資料就可能全部遺失。

若要避免資料遺失,您可以開啟 [工具] 功能表,按一下 [選項],然後選取 [如果可能遺失資料,即封鎖結構描述更新] 核取方塊。此外,在部署變更到資料庫之前,請務必先備份資料庫。

請參閱

工作

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

概念

Database Edition 的用語概觀

其他資源

比較資料庫資料概觀