3

我们有一个相对较新的数据库项目,在过去 6 个月左右的时间里,我们一直在编写视图和存储过程。

  • 数据库工作
  • 意见有效
  • 存储过程工作

但是,自从该项目开始以来,该项目的总体范围已大大增加,现在一些表名和字段名有点偏离基础。

例如,数据库中的主表名为SheetMetalRequest,但项目已经发展到现在实际的钣金请求只是可枚举类型的请求之一。因此,此表上的名称会误导进入该项目的人。

除了这个主表之外,其他表中的各种列也需要更改(SheetMetalRequestID例如,想想)。

进行此更改的问题是 10 个不同的视图和 30 个存储过程现在是该数据库的一部分。自然地,如果某些东西发生了变化,而不是一切都随之改变,我们工作的预生产数据库可能需要几个工时才能恢复到运行状态。

如果有某种类似于 Visual Studio 中存在的重构能力,那就太好了。

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition')

productversion | productlevel | edition
10.0.1600.22   | RTM          | Standard Edition (64-bit)
4

2 回答 2

3

如果像 SSDT 这样的工具由于某种原因对您不起作用,您可以按照自己的步调手动执行此操作。有时“单击一个按钮然后回家”的方法实际上并不是您想要的。

您可以从介绍同义词开始,例如

CREATE SYNONYM dbo.Requests FOR dbo.SheetMetalRequest;

现在您可以分段重构代码,将每个引用指向新名称。当您确信已捕获所有引用时(即使使用像 SSDT 这样的工具也不容易,因为它看不到数据库之外的代码 - 甚至看不到当前数据库中动态 SQL 中的代码),您可以删除同义词并重命名表:

BEGIN TRANSACTION;
    DROP SYNONYM dbo.Requests;
    EXEC sp_rename 'dbo.SheetMetalRequest', 'Requests', 'OBJECT';
COMMIT TRANSACTION

(您还需要sp_refreshsqlmodule在一个循环中更新所有模块,两次,以确保您已经完全纠正了依赖关系。)

这将允许您更新代码的不同部分(不仅是视图/存储过程,还包括中间层类甚至前端的东西)以引用正确的名称,而不必一次完成所有操作。

于 2012-05-21T21:34:42.673 回答
1

Red Gate 的 SQL Prompt 具有“智能重命名”功能,这听起来就像您正在寻找的一样。这不仅会重命名对象,还会重命名其他对象中对它的任何引用。这是我工作的公司的商业工具,但有 14 天的全功能评估期。

请参阅http://www.red-gate.com/products/sql-development/sql-prompt/features

于 2012-05-28T07:53:54.513 回答