共用方式為


重新命名資料庫物件前的考量

更新:2007 年 11 月

在 Visual Studio Team System Database 版中重新命名「資料庫物件」(Database Object) 之前,應注意下列問題:

重新命名資料行和資料表時避免遺失資料

重新命名檢視中的資料行

建置錯誤的影響

對資料產生計劃的影響

對單元測試的影響

對 T-SQL 指令碼的影響

重新命名資料行和資料表時避免遺失資料

當重新命名資料庫物件時,建置專案時所產生的部署指令碼會反映該項變更。當重新命名資料行或資料表時,指令碼會卸除舊有名稱的原始物件,並加入具有新名稱的新資料行或資料表。如果您以更新的形式將這項變更部署到現有資料庫,則會遺失原始資料行或資料表中的資料。

您可以在專案屬性中設定適當的選項,以控制是否要卸除原始的資料行或資料表。請開啟專案屬性,然後按一下 [建置] 索引標籤,再選取或清除 [針對位於目標資料庫但不在資料庫專案內的物件產生 DROP 陳述式] 核取方塊。如果您選取此核取方塊,則舊物件的 drop 陳述式會包含在建置專案時所產生的部署指令碼中。如果您清除此核取方塊,則舊物件的 drop 陳述式不會包含在建置專案時所產生的部署指令碼中。

為避免 drop 陳述式可能造成的資料遺失,您必須事先做好規劃。下列範例顯示可以安全移轉資料的幾種方法:

  • 以 sp_rename 陳述式取代 drop/add 陳述式。

  • 不要部署 drop 陳述式。您會擁有舊物件和新物件的複本,可以在這些複本之間移動資料。您可以使用 select into 或其他 T-SQL 陳述式,以手動方式移動資料。您可以使用大量複製工具程式 (Bulk Copy Program,BCP)、Data Transformation Services (SQL 2000) 或 SQL Server Integration Services (SQL 2005),自動移動資料。

  • 在部署變更之前,請將舊資料表中的資料移到暫存位置 (例如移至不同資料庫中的資料表)。部署 drop 和 add 陳述式。將暫存位置中的資料移到新物件中。您可以使用 select into 或其他 T-SQL 陳述式,以手動方式移動資料。您可以使用大量複製工具程式 (Bulk Copy Program,BCP)、Data Transformation Services (SQL 2000) 或 SQL Server Integration Services (SQL 2005),自動移動資料。

如需詳細資訊,請參閱在重新命名作業期間保護資料

重新命名檢視中的資料行

檢視包含從資料表或其他檢視選取資料行的陳述式。檢視中使用的資料表稱為基底資料表或基礎資料表。例如,下列程式碼會根據 HumanResources.Employee 資料表建立檢視:

CREATE VIEW dbo.vEmployeeTest
AS 
     SELECT EmployeeID, Title
       FROM HumanResources.Employee

當重新命名檢視中的資料行時,基礎資料表中的資料行不會重新命名。檢視中的名稱會設為別名,如下列範例所示:

CREATE VIEW dbo.vEmployeeTest
AS 
     SELECT EmployeeID, Title AS JobTitle
       FROM HumanResources.Employee

CREATE VIEW dbo.vEmployeeTest (EmployeeID, JobTitle)
AS 
     SELECT EmployeeID, Title
       FROM HumanResources.Employee
注意事項:

如果檢視使用 SELECT * 從基礎資料表取得資料,* 會擴充來列出個別資料行。重新命名的資料行會設為別名,如前面的範例所示。

如果要同時重新命名檢視和基礎資料表中的資料行,請重新命名資料表中的資料行,這會自動更新檢視中的資料行。

建置錯誤的影響

當在 Database 版中重新命名資料庫物件時,也會嘗試更新參考該物件的其他資料庫物件、「資料產生計劃」(Data Generation Plan)、單元測試和指令碼。當您處理「資料庫專案」(Database Project) 時,可能會執行動作而導致建置錯誤,然後再執行其他動作來修正該建置錯誤。例如,您可能會刪除資料表,然後再更新相依於該資料表的檢視,以移除對刪除資料表的參考。在刪除資料表和更新檢視之間,專案就會發生建置錯誤。

如果在專案包含建置錯誤時重新命名資料庫物件,物件仍能正確重新命名。不過,對重新命名物件的參考則不一定都能正確更新。如果專案中發生建置錯誤,會在 [預覽變更] 對話方塊中看到警告。如果繼續,物件會重新命名,而且會盡可能更新參考。如果取消作業,可以先修正建置錯誤,然後再次嘗試重新命名作業。

[預覽變更] 對話方塊會顯示下列項目的警告訊息:

  • 資料庫專案中的建置錯誤

  • 指令碼和單元測試中的語法錯誤

  • 格式不正確的資料產生計劃

對資料產生計劃的影響

當您在 Team Edition for Database Professionals 中重新命名資料庫物件時,將嘗試更新參考該物件的資料產生計劃。然而,您應該考慮下列事項:

  • 在重新命名物件之前,您必須儲存編輯器中開啟的任何資料產生計劃。如果在資料產生計劃開啟時嘗試重新命名物件,您會看到先儲存計劃的提示。如果繼續,所有開啟的資料產生計劃就會自動儲存和關閉,然後執行重新命名作業。如果不繼續,重新命名作業會取消。所有開啟的資料產生計劃仍會保持開啟,而且不會儲存。

  • 您必須手動更新使用資料繫結資料產生器的資料產生計劃。

如需詳細資訊,請參閱以資料產生器產生資料

對單元測試的影響

單元測試中的 Transact-SQL (T-SQL) 陳述式通常會參考資料庫中的物件,這些物件是在單元測試中的 ValidationConnectionString 和 ExecutionConnectionString 中指定。若非如此,則可能是下面兩種情況:

  • 單元測試中的 T-SQL 陳述式可能參考其他資料庫中的物件。

  • 單元測試中的 T-SQL 陳述式可能參考位於相同資料庫,但在不同結構描述中的物件 (SQL Server 2005)。

當在 Database 版中重新命名資料庫物件時,也會嘗試更新方案中參考該物件的單元測試。在前面所述的情況中,可能無法更新單元測試。若要在重新命名資料庫物件時一併更新單元測試,您必須確定在單元測試中使用了物件的完整限定名稱。如果在單元測試中使用完整限定名稱,只要重新命名結構描述物件,重構引擎就會自動更新這些名稱。

如需單元測試的詳細資訊,請參閱資料庫單元測試概觀

對 T-SQL 指令碼的影響

資料庫專案中的 T-SQL 指令碼通常會參考資料庫專案之資料庫中的結構描述物件。若非如此,則可能是下面兩種情況:

  • 指令碼中的 T-SQL 陳述式可能參考其他資料庫中的物件。

  • 指令碼中的 T-SQL 陳述式可能參考位於相同資料庫,但在不同結構描述中的物件 (SQL Server 2005)。

當在 Database 版中重新命名資料庫物件時,也會嘗試更新方案中參考該物件的指令碼。在前面所述的情況中,可能無法更新指令碼。若要在重新命名資料庫物件時一併更新指令碼,您必須確定在指令碼中使用了物件的完整限定名稱。如果在指令碼中使用完整限定名稱,只要重新命名結構描述物件,重構引擎就會自動更新這些名稱。

如需指令碼的詳細資訊,請參閱使用資料庫指令碼

安全性

如果發生錯誤而導致重構作業無法完成,錯誤的相關資訊將會寫入應用事件記錄檔,任何具有「一般使用者」權限的使用者都可以進行檢視。如果您的結構描述資訊被視為機密且可能出現在記錄檔中,您可能需要清除記錄檔或限制用戶端電腦的存取。

請參閱

概念

Database Edition 的用語概觀

其他資源

重新命名資料庫物件

重新命名重構的概觀