更新:2007 年 11 月
在 Visual Studio Team System Database Edition 中重命名数据库对象之前,应考虑以下问题:
重命名列和表时防止数据丢失
重命名视图中的列
生成错误的影响
对数据生成计划的影响
对单元测试的影响
对 T-SQL 脚本的影响
重命名列和表时防止数据丢失
重命名数据库对象时,生成项目时产生的部署脚本将反映此更改。重命名列或表时,该脚本将删除具有原始名称的原始对象并添加使用新名称的新列或表。如果将此更改作为更新部署到现有数据库中,则原始列或表中的数据将丢失。
可以通过在项目属性中设置相应的选项来控制是否删除原始列或表。设置的方法为:打开项目属性,单击“生成”选项卡,选中或清除“为目标数据库中存在而数据库项目中不存在的对象生成 DROP 语句”复选框。如果选中此复选框,旧对象的 drop 语句将包括在项目生成期间所生成的部署脚本中。如果清除此复选框,则旧对象的 drop 语句将不包括在项目生成期间所生成的部署脚本中。
若要防止由 drop 语句引起的潜在的数据丢失,必须提前制定计划。以下示例演示了可用以安全迁移数据的方法:
用 sp_rename 语句替换 drop/add 语句。
不要部署 drop 语句。您将拥有旧对象的副本和新对象的副本,并且可以在新旧对象的副本间移动数据。可以使用 select into 或其他 T-SQL 语句手动移动数据。也可以使用批量复制程序、Data Transformation Services (SQL 2000) 或 SQL Server Integration Services (SQL 2005) 自动移动数据。
部署更改前,请将数据从旧表移动到临时位置(例如,移动到不同数据库的表中)。部署 drop 和 add 语句。将数据从临时位置移动到新对象。可以使用 select into 或其他 T-SQL 语句手动移动数据。也可以使用批量复制程序、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 Edition 中重命名数据库对象时,将尝试更新引用此对象的其他数据库对象、数据生成计划、单元测试以及脚本。在数据库项目中工作时,您所进行的某一步操作可能会引起生成错误,然后会进行另一步操作以更正该生成错误。例如,您可能删除了一个表,然后可能会更新一个依赖于该表的视图来移除对所删除表的引用。在删除表和更新视图之间,您的项目会出现生成错误。
即使在项目中有生成错误时重命名数据库对象,也能正确地重命名该对象。但是,可能无法正确更新对所重命名对象的所有引用。如果项目中存在生成错误,则“预览更改”对话框会发出警告。如果继续,将重命名对象,并尽可能多地更新引用。如果取消该操作,则可以先修复生成错误,然后再次尝试重命名操作。
“预览更改”对话框显示关于下列错误的警告:
数据库项目中的生成错误
脚本和单元测试中的语法错误
格式不正确的数据生成计划
对数据生成计划的影响
在 Team Edition for Database Professionals 中重命名数据库对象时,会尝试更新引用此对象的数据生成计划。但是,应考虑以下几点:
必须先保存编辑器中打开的所有数据生成计划,然后才能重命名对象。尝试重命名对象时,如果打开了数据生成计划,系统将提示您先保存打开的计划。如果继续,将自动保存并关闭所有打开的数据生成计划,然后继续重命名操作。如果不继续,将取消重命名操作。所有打开的数据生成计划将继续保持打开状态,并且不进行保存。
必须手动更新使用数据绑定数据生成器的数据生成计划。
有关更多信息,请参见使用数据生成器生成数据。
对单元测试的影响
单元测试中的 Transact-SQL (T-SQL) 语句通常引用在单元测试的 ValidationConnectionString 和 ExecutionConnectionString 中指定的数据库中的对象。下面是两种可能的例外情况:
单元测试中的 T-SQL 语句可以引用其他数据库中的对象。
单元测试中的 T-SQL 语句可以引用相同数据库中但在不同架构中的对象 (SQL Server 2005)。
在 Database Edition 中重命名数据库对象时,将尝试更新解决方案中引用此对象的单元测试。在前面提到的情况下,可能无法更新单元测试。若要在重命名数据库对象时更新单元测试,必须确保在单元测试中使用完全限定的对象名称。如果在单元测试中使用完全限定的名称,则无论何时重命名架构对象,重构引擎都可以对它们进行更新。
有关单元测试的更多信息,请参见数据库单元测试概述。
对 T-SQL 脚本的影响
数据库项目中的 T-SQL 脚本通常引用数据库项目的数据库中的架构对象。下面是两种可能的例外情况:
脚本中的 T-SQL 语句可以引用其他数据库中的对象。
脚本中的 T-SQL 语句可以引用相同数据库中但在不同架构中的对象 (SQL Server 2005)。
在 Database Edition 中重命名数据库对象时,将尝试更新解决方案中引用此对象的脚本。在前面提到的情况下,可能无法更新脚本。若要在重命名数据库对象时更新脚本,必须确保在脚本中使用完全限定的对象名称。如果在脚本中使用完全限定的名称,则无论何时重命名架构对象,重构引擎都可以对它们进行更新。
有关脚本的更多信息,请参见处理数据库脚本。
安全性
如果因出错而无法完成重构操作,则有关该错误的信息将写入应用程序事件日志中,对此应用程序事件日志拥有“普通用户”权限的任何用户都可以查看该信息。如果架构信息被视为敏感信息并且可能会显示在日志中,则您可能需要清除该日志或限制对客户端计算机的访问。