共用方式為


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

更新:2010 年 7 月

這個主題適用於:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

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

您可以使用 Visual Studio Premium 或 Visual Studio Ultimate 比較兩個資料庫「結構描述」(Schema)。 這些結構描述可能會以下列形式表示:資料庫、「資料層應用程式」(Data-Tier Application) 專案、「資料庫專案」(Database Project),或資料庫專案的建置輸出 (.dbschema 檔)。 您所比較的實體稱為「來源」(Source) 與「目標」(Target)。 當結構描述比較完成時,結果會出現在 [結構描述比較] 視窗中。 此外,Visual Studio 也會產生「資料定義語言」(Data Definition Language,DDL) 指令碼,用來同步處理不同的結構描述。

如果您計劃多次重複比較資料庫專案與目標資料庫,可以將結構描述比較加入至資料庫專案。 以後您只需重新開啟該比較,即可重新比較結構描述。 儲存結構描述比較時,所儲存的會是連線資訊、工作階段特定選項,和 SQLCMD 變數的值。 結果並不會儲存,當您開啟已儲存結構描述比較的 .scmp 檔時,會重新產生結果。

在比較完成之後,您可以執行其他步驟:

  • 您可以檢視兩個資料庫的結構差異。 如需詳細資訊,請參閱檢視結構描述差異。

  • 您可以按一下 [重新整理更新指令碼],查看當您決定要同步處理結構描述時,會用於同步處理結構描述的完整指令碼。

  • 您可以更新目標的部分或全部,以與來源相符。 如需詳細資訊,請參閱同步處理資料庫或伺服器物件。

  • 您可以比較目標和來源中的資料。 如需詳細資訊,請參閱 HOW TO:比較及同步處理兩個資料庫的資料

如需結構描述比較案例的詳細資訊,請參閱比較和同步處理資料庫結構描述

您也可以使用 VSDBCMD.EXE,在命令提示字元中比較 .dbschema 檔案。 例如,當您無法直接存取目標伺服器時,若要產生更新指令碼來更新目標資料庫,可能就會這樣做。

本主題內容

若要使用結構描述比較來比較兩個結構描述

  1. 如果您要比較兩個結構描述,但是不要將設定儲存為資料庫專案的一部分,請執行下列步驟:

    1. 開啟 [資料] 功能表,指向 [結構描述比較],然後按一下 [新增結構描述比較]。

    2. 跳至步驟 3。

  2. 如果您要比較兩個結構描述,然後將設定儲存為資料庫專案的一部分,請執行下列步驟:

    1. 在 [方案總管] 中,以滑鼠右鍵按一下 [結構描述比較] 資料夾、指向 [加入],然後按一下 [結構描述比較]。

      [加入新項目] 對話方塊隨即出現。

    2. 在 [名稱] 中,輸入要使用的結構描述比較名稱,然後按一下 [加入]。

  3. 針對每個結構描述按一下 [專案]、[資料庫] 或 [資料庫結構描述檔],指定要比較的每個來源和目標。

    注意事項注意事項

    您可以指定資料庫結構描述檔做為目標結構描述,但是無法更新該檔案。 如需支援的比較案例的完整清單,請參閱比較和同步處理資料庫結構描述

  4. 如果按一下 [資料庫] 做為來源或目標,請在清單中按一下並連接資料來源。

    如果您的資料庫未列在其中,請按一下 [新增連接]。 在 [連接屬性] 對話方塊中,指定來源或目標所在的伺服器,以及連接時要使用的驗證類型。 選擇性地按一下該伺服器上的資料庫。 完成後,請按一下 [確定]。

    注意事項注意事項

    在建立連接之後,連接會出現在 [伺服器總管] 的 [資料連接] 下方。

  5. 如果按一下 [資料庫結構描述檔] 做為來源或目標,請輸入路徑和檔案名稱,或按一下 [瀏覽] 指定檔案。

  6. (選擇性) 按一下 [選項] 以指定要比較的物件、要忽略的差異類型,和要在產生的更新指令碼中包含的內容。

    重要事項重要事項

    根據預設,結構描述比較工作階段會使用當您開啟 [工具] 功能表然後按一下 [選項] 時設定的選項。 如果您不想忽略擴充屬性,請按一下 [選項] 以變更對應設定。 如需設定結構描述比較選項的詳細資訊,請參閱 HOW TO:設定用來比較資料庫結構描述的選項

  7. (選擇性) 按一下 [SQLCMD 變數] 以指定 .sqlcmdvars 檔案,這個檔案包含變數和其值的清單。

    注意事項注意事項

    當您比較兩個物件 (資料庫專案、伺服器專案或資料層應用程式專案) 時,只能指定 SQLCMD 變數。

    比較結構描述時,會取代對應資料庫專案中的值。

  8. 按一下 [確定]。

    結構描述比較便開始。

    注意事項注意事項

    您可以按一下工具列上的 [停止],停止正在進行的比較。

若要使用 Visual Studio Automation 模型來比較結構描述

  1. 開啟 [檢視] 功能表,指向 [其他視窗],然後按一下 [命令視窗]。

  2. 在 [命令視窗] 中輸入下列命令:

    Data.NewSchemaComparison sourceIdentifier targetIdentifier
    

    以下列其中一項取代 sourceIdentifier:

    • /ProviderType ConnectionBased /ConnectionString "myConnectString"

    • /ProviderType ConnectionBased /ConnectionName myConnectionName

    • /ProviderType ProjectBased /ProjectName myFileName.dbproj

    • /ProviderType FileBased /ProjectName myFileName.dbschema

    • /ProviderType FileBased /ProjectName myFileName.dacpac

    以下列其中一項取代 targetIdentifier:

    • /ProviderType ConnectionBased /ConnectionString "myConnectString"

    • /ProviderType ConnectionBased /ConnectionName myConnectionName

    • /ProviderType ProjectBased /ProjectName myFileName.dbproj

    • /ProviderType FileBased /ProjectName myFileName.dbschema

    • /ProviderType FileBased /ProjectName myFileName.dacpac

    如果沒有指定來源和目標,則會出現 [新增結構描述比較] 對話方塊。 如需 Data.NewSchemaComparison 命令之參數的詳細資訊,請參閱 Visual Studio 資料庫功能的 Automation 命令參考

    指定之來源和目標的物件和設定會進行比較。 結果會出現在您可以選擇性儲存的 [結構描述比較] 工作階段中。 如需如何檢視結果或同步處理結構描述的詳細資訊,請參閱檢視結構描述差異和同步處理資料庫或伺服器物件。

第一次儲存結構描述比較

  1. 按一下 [檔案] 功能表上的 [儲存 SchemaComparisonName.scmp]。

    [另存新檔] 對話方塊隨即開啟。

  2. 指定結構描述比較的路徑和檔案名稱。

    如果比較是資料庫專案的一部分,則比較會儲存在該專案的 SchemaComparisons 資料夾中。

  3. 按一下 [儲存]。

    結構描述比較隨即儲存至您指定的位置。

檢視結構描述差異

您可以藉由比較來源和目標結構描述,並且在 [結構描述比較] 視窗中檢視結果,判斷目標和來源結構描述的差異。 例如,您可以只顯示僅存在於來源中但不存在於目標中的物件。 此外也可以檢視特定物件差異的詳細資料,而且可以重新整理結果以反映最新的變更。

您也可以在指令碼中以 Transact-SQL 命令檢視結果,該指令碼會同步處理目標和來源。 您可以在 [結構描述更新指令碼] 或 Transact-SQL 編輯器中顯示這個指令碼,也可以將指令碼匯出至檔案。 如果您決定要更新目標以符合來源,可以立即執行指令碼來同步處理結構描述,或者先修改指令碼再加以執行。 如需詳細資訊,請參閱同步處理資料庫或伺服器物件。

若要依類型篩選結果

  1. 按一下 [結構描述比較] 工具列上的 [篩選]。

  2. 按一下一個或多個篩選條件以指定要顯示的結果集。

    注意事項注意事項

    儲存 .scmp 檔時會一併儲存篩選設定,而且當您變更來源和目標結構描述時,仍會保留這些篩選設定。

若要檢視物件定義內的變更

  • 按一下格線內任何狀態為「新增」、「遺漏」或「不同」的圖案之資料列。

若要重新整理比較結果

  • 按一下 [結構描述比較] 工具列上的 [重新整理]。

    再次比較來源和目標,比較的結果會更新。

若要檢視同步指令碼

  • 指向 [資料] 功能表上的 [結構描述比較],然後按一下 [顯示結構描述更新指令碼]。

    注意事項注意事項

    如果 [顯示結構描述更新指令碼] 無法使用,可能是無法針對您指定的目標產生指令碼,或需要重新整理比較。 例如,如果您的目標結構描述是 .dbschema 檔,即無法建立更新指令碼。

    [結構描述更新指令碼] 視窗會出現並且顯示您可用來更新目標以符合來源的指令碼。

    注意事項注意事項

    如果 [結構描述更新指令碼] 視窗開啟,您也可以按一下 [重新整理結構描述更新指令碼]。

若要在 Transact-SQL 編輯器中開啟同步處理指令碼

  • 指向 [資料] 功能表上的 [結構描述比較],指向 [匯出至],然後按一下 [編輯器]。

    Transact-SQL 編輯器會出現並且顯示您可用來更新目標以符合來源的指令碼。

若要將同步指令碼儲存至檔案

  1. 指向 [資料] 功能表上的 [結構描述比較],指向 [匯出至],然後按一下 [檔案]。

    [儲存更新結構描述指令碼] 對話方塊隨即出現。

  2. 在 [物件名稱] 中,輸入要使用的同步指令碼名稱,然後按一下 [儲存]。

    指令碼即會儲存為您指定的檔案名稱。

同步處理資料庫或伺服器物件

在您比較來源與目標的結構描述之後,可以同步處理整個結構描述,或只同步處理您在該結構描述中指定的「資料庫物件」(Database Object)。 如需詳細資訊,請參閱比較和同步處理資料庫結構描述

如果來源和目標在相同的伺服器上,則您同步處理結構描述時可能會發生錯誤。 錯誤發生的原因是目標檔案 (例如檔案群組檔案) 無法以和來源相同的名稱建立,因為這些名稱已存在伺服器上。 若要解決此問題,請針對衝突的檔案將 [更新動作] 變更為 [略過]。

注意事項注意事項

您所比較的資料庫稱為「來源」(Source) 與「目標」(Target)。 當您同步處理資料庫結構描述時,您會更新目標,並讓來源維持不變。 雖然您可以指定專案檔 (.dbschema) 做為目標,但是無法更新專案檔。

若要更新目標結構描述

  1. 比較兩個結構描述。

    當比較完成之後,[結構描述比較] 視窗會列出所比較的資料庫物件。 每一個資料列都代表一個資料庫物件。

  2. (選擇性) 在 [更新動作] 資料行中,指定要對結果清單中的每個物件套用還是略過更新。

    個別的同步處理動作不會立刻執行,而是儲存起來,在後續的步驟中批次執行。

    注意事項注意事項

    若要針對特定型別的所有物件重設 [更新動作] 資料行,請以滑鼠右鍵按一下該型別的節點 (例如,[資料表] 節點),然後按一下 [還原預設值]。 若要針對所有特定型別的物件將 [更新動作] 資料行設定為特定狀態,請以滑鼠右鍵按一下該型別的節點,然後按一下 [全部建立]、[全部更新] 或 [全部略過]。

  3. 若要同步處理不同、遺漏或新增的資料庫物件,請執行下列其中一項:

    • 若要立即更新目標,請按一下 [寫入更新]。

      這個選項會將來源中選定資料庫物件的結構描述套用到目標的對應物件,標記為 [略過] 的物件除外。 這項同步處理意味著更新、建立或卸除目標物件。

      重要事項重要事項

      在更新結構描述時,您可以按一下 [停止寫入目標] 來取消作業。 如果您停止更新,則大多數的物件型別都不會傳播變更; 但是,使用者和角色物件的部分變更可能無法復原,因為這些物件無法包裝在交易中。

    • 若要在更新目標之前檢閱變更,請使用 [結構描述更新指令碼] 視窗或是按一下 [匯出至編輯器]。

      這個選項會產生 Transact-SQL 指令碼,並且在 Transact-SQL 編輯器視窗中加以開啟。 在對目標執行指令碼之前,您可以先檢閱並視需要修改指令碼。 產生的 Transact-SQL 指令碼會符合當您按一下 [寫入更新] 時所執行的指令碼。

      注意事項注意事項

      當 [寫入更新] 動作完成之後,Visual Studio 不會自動重新整理 [結構描述比較] 視窗中所出現的結果。 而是會更新狀態列,建議您按一下 [重新整理]。 這個行為讓您可以選擇再次比較結構描述,當結構描述很龐大時,這個動作會花上很長的時間。

    • 若要將變更儲存至檔案而不先在 Transact-SQL 編輯器視窗中檢視變更,請按一下 [匯出至檔案]。

      這個選項會產生 Transact-SQL 指令碼,並且將它儲存為您指定的檔案名稱。 產生的指令碼會符合當您按一下 [寫入更新] 時所執行的指令碼。 如果之後會有另一個人需要用您提供的指令碼更新目標,或者有另一個人必須對指令碼進行其他變更,即可以採取這個方法。

使用 VSDBCMD.EXE 比較結構描述

您可能會想要針對沒有存取權的資料庫產生部署指令碼。 如果您擁有想要部署之專案的 .dbschema 檔案,以及代表目標資料庫之目前狀態的 .dbschema,就可以使用 VSDBCMD.EXE 來達成此工作。 如果您沒有目標結構描述,也可以要求資料庫管理員使用本節中的第二個程序來為您匯入。

您可以在具有 VSDBCMD.EXE 工具和支援檔案的任何電腦上執行這兩個程序。 您可以在下列資料夾及其子資料夾中找到所有必要的檔案:%PROGRAM FILES%\Microsoft Visual Studio 10.0\VSTSDB\Deploy。 如需詳細資訊,請參閱 VSDBCMD.EXE 的命令列參考 (部署和結構描述匯入)

若要在命令提示字元中比較結構描述

  1. 開啟命令提示字元。

  2. 將資料夾變更為包含 VSDBCMD.EXE 的資料夾。

  3. 在命令提示字元中,輸入下列命令:vsdbcmd.exe /a:deploy /dd:- /dsp:sql /model:ProjectName.dbschema /targetmodelfile:TargetDatabase.dbschema /DeploymentScriptFile:OutputFilename.sql /p:TargetDatabase="TargetDatabaseName"

    將 ProjectName 取代成建置資料庫專案時所建立的 .dbschema 檔案名稱。 將 TargetDatabase 取代成包含目標資料庫之結構描述的 .dbschema 檔案名稱。 將 OutputFilename 取代成您想要提供給部署指令碼的名稱。 將 TargetDatabaseName 取代成您想要更新的資料庫名稱。

    注意事項注意事項

    如果您想要包含資料庫專案中的預先部署和部署後指令碼,也可以將一個參數加入至命令列:/ManifestFile:ProjectName.deploymanifest。 您可以在專案資料夾底下 sql 資料夾的子資料夾中找到 .deploymanifest 檔案。

  4. 接著,您可以使用 OutputFilename.sql 檔案,將更新部署至目標伺服器,也可以要求資料庫管理員進行此工作。

若要匯入目標結構描述

  1. 開啟命令提示字元。

  2. 瀏覽至包含 VSDBCMD.EXE 的資料夾。

  3. 在命令提示字元中,輸入下列命令:vsdbcmd.exe /a:Import /dsp:sql /model:TargetDatabase.dbschema /cs:ConnectionString

    將 TargetDatabase 取代成您要從目標資料庫匯入的 .dbschema 檔案名稱。 將 ConnectionString 取代成目標資料庫的連接字串。 例如,您可能會指定 /cs:"Data Source=MyServer/SQL2K8;Integrated Security=True;Pooling=False;Initial Catalog=MyDatabase"。

    完成此命令時,就會建立 .dbschema 檔案。 它會包含您從中匯入之資料庫的結構描述定義。 如需詳細資訊,請參閱HOW TO:從命令提示字元匯入結構描述VSDBCMD.EXE 的命令列參考 (部署和結構描述匯入)

請參閱

工作

HOW TO:比較及同步處理兩個資料庫的資料

概念

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

變更記錄

日期

記錄

原因

2010 年 7 月

已加入有關如何使用 VSDBCMD.EXE 從命令提示字元比較結構描述的資訊。

客戶回函。