在小組環境中重構資料庫物件
使用 Visual Studio Premium 時,只要將資料庫「結構描述」(Schema) 的離線表示 (稱為「資料庫專案」(Database Project)) 置於版本控制系統之下,您就可以管理變更。 您或小組成員可以變更資料庫專案,但所做的變更稍後必須建置並部署到線上資料庫中。 在這種情況下,最多可以存在四種資料庫表示:
包含線上資料庫和資料的資料庫伺服器。
資料庫專案,代表資料庫結構描述的離線表示。
已編譯的 .dbschema 檔案,其中包含將該資料庫結構描述部署至任何「目標」(Target) 資料庫和伺服器所需的資訊。 每當您建置資料庫專案時,就會建立這個檔案。
版本控制儲存機制,會追蹤任何小組成員對資料庫專案所做的全部變更。
如需詳細資訊,請參閱開始進行小組資料庫開發。
在小組環境中重構
如果您使用重構來重新命名「資料庫物件」(Database Object) 或將它移至不同的結構描述,則系統會自動使用新的名稱或結構描述來更新參考已重新命名或移動物件的其他物件。 例如,您可以為資料表中的資料行重新命名,而如果有任何預存程序參考該資料行,則會以新的名稱來自動更新此預存程序。 如需詳細資訊,請參閱重新命名資料庫物件的所有參考或將資料庫物件移至其他結構描述。
在更新資料庫物件之前,您必須先針對所有必須更新的物件,從原始檔控制簽出檔案。 如果已設定原始檔控制選項自動簽出檔案,會嘗試以無訊息模式簽出檔案。 否則系統會提示您簽出檔案。
在下列狀況中,重構作業會失敗:
如果其他人已經鎖定一個或多個檔案,這時會出現一則訊息,接著取消重構作業。 您必須等到檔案解除鎖定,才能再次嘗試此作業。
如果您簽出的版本比專案中的版本還新,這時會出現一則訊息,接著取消重構作業。 您應該先協調檔案版本,然後再重試此作業。
如果看到簽出檔案的提示時按一下 [取消],則會取消重構作業。
注意事項 當您重新命名資料庫物件時,並不會重新命名定義該物件的 .sql 檔案。 您可以在 [方案總管] 中手動重新命名該檔案。
重構記錄和保留原意
當您使用重構來重新命名或移動「資料庫物件」(Database Object) 時,系統就會使用該作業的詳細資料來更新 ProjectName.refactorlog 檔案。 當您部署變更時,記錄檔可協助您保留原本的變更意圖,因為部署指令碼中包含保留該意圖的作業。 例如,部署可能會為資料行發出 sp_rename 陳述式,而不會捨棄和建立陳述式。
如果有兩位或多位開發人員進行了更新重構記錄的變更,您就必須合併記錄檔的變更。 .refactoring 檔案是具有簡單結構描述的 XML 檔案,因此合併更新應該不太困難。 每個作業都會包含日期和時間,方便您確保系統按照正確的順序套用重構作業。
警告
如果您自動合併重構記錄的變更,可能會發生錯誤。 您應該一律先檢閱自動合併的結果或手動合併變更,然後再嘗試部署資料庫專案。
您的重構記錄將與下列範例類似:
<?xml version="1.0" encoding="utf-16"?>
<Operations>
<Operation Name="Move Schema" Key="677a0ee6-1707-413a-985f-b392b1a2d68b" ChangeDateTime="04/07/2008 21:59:00">
<Property Name="ElementName" Value="[Person].[AbsenceHistory]" />
<Property Name="ElementType" Value="ISql90Table" />
<Property Name="NewSchema" Value="HumanResources" />
<Property Name="IsNewSchemaExternal" Value="True" />
</Operation>
<Operation Name="Rename Refactor" Key="fb88992c-cd6e-43d0-aa54-ed80f155d202" ChangeDateTime="04/07/2008 21:59:26">
<Property Name="ElementName" Value="[HumanResources].[AbsenceHistory].[column_1]" />
<Property Name="ElementType" Value="ISqlSimpleColumn" />
<Property Name="ParentElementName" Value="[HumanResources].[AbsenceHistory]" />
<Property Name="ParentElementType" Value="ISql90Table" />
<Property Name="NewName" Value="EmployeeID" />
</Operation>
</Operations>
在這個範例記錄中,記錄了兩個重構作業。 在第一個作業中,[AbsenceHistory] 資料表已經從 [Person] 結構描述移至 [HumanResources] 結構描述。 在第二個作業中,[AbsenceHistory] 資料表中的 [column_1] 資料行已經重新命名為 [EmployeeID]。