逐步解說:比較兩個資料庫的資料
這個主題適用於:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
在此逐步解說中,您會比較兩個資料庫的資料、根據差異產生「資料操作語言」(Data Manipulation Language,DML) 指令碼,然後使用該指令碼將「來源」(Source) 中的資料填入「目標」(Target)。
在這個逐步解說中,您將遵循下列程序:
將資料加入至來源資料庫。 在此程序中,您會使用 Transact-SQL 編輯器將資料加入至來源資料庫中的 Customer 資料表。
比較兩個資料庫的資料。 在此程序中,您會尋找資料的差異、將差異顯示於方格中,然後產生 DML 指令碼來表示這些差異。
更新目標資料庫。 在此程序中,有兩個方法可以更新目標,使其符合來源。
必要條件
您必須先擁有下列產品的存取權,才能完成此逐步解說:
SQL Server 2008
Visual Studio Premium 或 Visual Studio Ultimate
在您開始此逐步解說之前,您必須先遵循逐步解說:比較兩個資料庫的結構描述中的程序。 當您完成此逐步解說之後,您將會有兩個資料庫:
來源資料庫 CompareProjectDB 有其原始結構,但不包含任何資料。 您可自訂專案,將資料插入至資料庫中,做為部署後指令碼的一部分。
目標資料庫 EmptyDB 是您在此逐步解說中所建立且用來比較「結構描述」(Schema) 的資料庫。 然後,您只會將 AdventureWorks2008 資料庫的結構描述套用至 EmptyDB。 因此,EmptyDB 不包含任何資料。
您必須具備權限,才能從來源和目標資料庫讀取資料。
將資料加入至來源資料庫
若要使用 Transact-SQL 編輯器將資料加入至來源資料庫
指向 [資料] 功能表上的 [Transact-SQL 編輯器],然後按一下 [新增查詢連接]。
指定對 CompareProjectDB 所在伺服器的連接。
在 Transact-SQL 編輯器中輸入下列 Transact-SQL 陳述式:
use CompareProjectDB; go delete from [Sales].[Customer]; go exec [Sales].[uspNewCustomer] 'Ken J. Sánchez' exec [Sales].[uspNewCustomer] 'Terri Lee Duffy' exec [Sales].[uspNewCustomer] 'Roberto Tamburello' exec [Sales].[uspNewCustomer] 'Rob Walters' exec [Sales].[uspNewCustomer] 'Gail Erickson' exec [Sales].[uspNewCustomer] 'Jossef Goldberg' exec [Sales].[uspNewCustomer] 'Dylan Miller' exec [Sales].[uspNewCustomer] 'Diane Margheim' exec [Sales].[uspNewCustomer] 'Gigi Matthew' go
在 [Transact-SQL 編輯器] 工具列上,按一下 [執行 SQL]。
Transact-SQL 陳述式會移除 [Sales].[Customer] 資料表中的任何現有資料,然後使用 [Sales].[uspNewCustomer] 預存程序加入 9 個客戶。 您的來源資料庫現已包含資料,您可以將它與目標資料庫進行比較。
比較兩個資料庫的資料
若要比較兩個資料庫的資料
指向 [資料] 功能表上的 [資料比較],然後按一下 [新增資料比較]。
[新增資料比較] 精靈隨即出現。 此外,[資料比較] 視窗也會在背景開啟,而 Visual Studio 會自動指定像是 DataCompare1 的名稱。
在 [來源資料庫] 清單中,按一下對 CompareProjectDB 資料庫的連接。
如果 [來源資料庫] 清單是空的,請按一下 [新增連接]。 在 [連接屬性] 對話方塊中,識別 CompareProjectDB 資料庫所在的伺服器以及連接到資料庫時所要使用的驗證類型。 然後按一下 [確定] 關閉 [連接屬性] 對話方塊,回到 [新增資料比較] 精靈。
在 [目標資料庫] 清單中,按一下 Server.EmptyDB.dbo。
如果 [目標資料庫] 清單是空的,請按一下 [新增連接]。 在 [連接屬性] 對話方塊中,識別 EmptyDB 資料庫所在的伺服器以及連接到資料庫時所要使用的驗證類型。 然後按一下 [確定] 關閉 [連接屬性] 對話方塊,回到 [新增資料比較] 精靈。
如果您想要限制比較結果中會出現哪些記錄,您可以指定 [資料比較選項]。 在此逐步解說中,請接受預設值以顯示所有記錄。
按一下 [下一步]。
您可以在 [新增資料比較] 精靈的第二個頁面上,定義一份要比較的資料表和檢視表。 此資料庫的所有資料表都會列在 [資料表] 節點底下。 您可以展開個別資料表,以顯示其所包含的資料行。 預設會顯示所有的資料表和資料行,並且進行比較。 此外,會對清單中的每一個資料表或檢視表顯示用於比較記錄的索引鍵。 資料表和檢視表必須符合特定準則,才能進行比較。 如需詳細資訊,請參閱使用參考資料庫中的資料比較和同步處理一個或多個資料表中的資料。
注意事項 如果您不想自訂所要比較的資料表和檢視表,可以按一下 [完成],而非 [下一步]。
按一下 [完成],開始比較作業。
比較隨即開始。
注意事項 您可以按一下 [資料比較] 工具列上的 [停止],停止正在進行的資料比較作業。
當比較完成時,[資料比較] 視窗中的資料表會顯示兩個資料庫之間的資料差異。 如需如何檢視這些結果的詳細資訊,請參閱下一個程序。
您現在可以更新目標中的資料,使其符合來源中的資料。 如需詳細資訊,請參閱更新目標資料庫。
若要檢視資料比較結果
按一下 [Sales].[Customer] 資料列。
在 [記錄檢視] 窗格中,索引標籤名稱會變更,以反映每一個類型的記錄數目:[不同的記錄 (0)]、[僅限於來源 (9)]、[僅限於目標 (0)] 和 [相同的記錄 (0)]。
按一下 [僅限於來源 (9)] 索引標籤。
在 [僅限於來源 (9)] 索引標籤上,每一個資料列和每一個資料行都會對應到 [Sales].[Customer] 資料表中的資料列或資料行。
注意事項 您可以使用這些索引標籤來控制傳播給目標的資料。
更新目標
您可以直接從 [資料比較] 視窗或是使用 Transact-SQL 編輯器,更新目標中的資料。 本章節將描述這兩種選擇。
當您比較資料之後,差異處會出現在 [資料比較] 視窗的方格內。 [物件] 資料行中的每一個資料表或檢視表都會有一個核取方塊,指示該物件是否會包含在更新作業中。 這些資料行會顯示資料比較作業所指示之哪些類型的那些變更。 在此例中,由於目標是空的,其中只有預設物件,所以只有 [僅限於來源] 資料行才會顯示所做的變更。
使用資料比較選項來寫入更新
若要使用出現在 [資料比較] 視窗中的更新動作來更新目標的資料,請使用下列程序:
- 更新目標資料庫
使用 Transact-SQL 編輯器來寫入更新
若要匯出、檢查及變更更新指令碼,然後用它來變更目標,請使用下列程序:
- 檢查並執行同步指令碼
更新目標資料庫
若要更新目標
在 [資料比較] 視窗中,按一下 [Sales].[Customer]。
在詳細資料窗格中,按一下 [僅限於來源]。
前兩個資料列是針對名為 Ken J. Sánchez 和 Terri Lee Duffy 的客戶。
在詳細資料窗格的狀態列上,狀態列會陳述來源中所遺漏的記錄數目以及將會在目標中刪除的記錄數目。 這兩個數字會相符。
請清除 Terri Lee Duffy 資料列中的核取方塊。
在詳細資料窗格的狀態列上,要插入的記錄數目已經減少一筆記錄, 它不再符合目標中所遺漏的記錄數目。
按一下 [資料比較] 視窗中的 [寫入更新]。
即會實作 [資料比較] 視窗中所列的更新動作。 這項同步處理會變更目標,使其與來源相符。
注意事項 在更新目標時,您可以按一下 [停止寫入目標] 來取消作業。
檢查並執行同步指令碼
若要檢查同步指令碼
在 [資料比較] 工具列中,按一下 [匯出至編輯器]。
Transact-SQL 編輯器會在連接模式中開啟,並顯示此 Transact-SQL 指令碼。 這個視窗的名稱會類似於 DataUpdate_EmptyDB_1.sql。 由於您在此視窗中具有寫入權限,因此可以變更此指令碼。 如果您要儲存更新指令碼,請按一下 [儲存]。
若要同步處理兩個資料庫的資料,請按一下 [執行 SQL] 或按 F5 鍵,執行這個指令碼。
注意事項 當此指令碼正在執行時,您可以按一下 [取消查詢執行] 或按 Alt + Break,取消作業。