Visual studio 2010 可以在SQL Server中重构数据库吗?
我们有一个相对较新的数据库项目,在过去6个月左右的时间里,我们一直在编写视图和存储过程Visual studio 2010 可以在SQL Server中重构数据库吗?,visual-studio-2010,sql-server-2008,refactoring,Visual Studio 2010,Sql Server 2008,Refactoring,我们有一个相对较新的数据库项目,在过去6个月左右的时间里,我们一直在编写视图和存储过程 数据库工作正常 这些观点有效 存储过程可以工作 然而,自从这个项目启动以来,项目的总体范围有了很大的增长,现在一些表名和字段名有点偏离了基准 例如,数据库中的主表名为SheetMetalRequest,但该项目已发展到现在实际的钣金请求只是可枚举请求类型之一。因此,此表中的名称对参与项目的人员具有误导性 除此主表外,其他表中还有许多列也需要更改(例如,想想SheetMetalRequestID) 进行此更
- 数据库工作正常
- 这些观点有效
- 存储过程可以工作
SheetMetalRequest
,但该项目已发展到现在实际的钣金请求只是可枚举请求类型之一。因此,此表中的名称对参与项目的人员具有误导性
除此主表外,其他表中还有许多列也需要更改(例如,想想SheetMetalRequestID
)
进行此更改的问题是10个不同的视图和30个存储过程,它们现在是此数据库的一部分。当然,如果某些内容发生了更改,而不是所有内容都随之更改,我们的预生产数据库可能需要几个工时才能恢复到运行状态
如果有一种重构能力,就像visualstudio中存在的一样,那将是非常好的
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY('productlevel'), SERVERPROPERTY('edition')
productversion | productlevel | edition
10.0.1600.22 | RTM | Standard Edition (64-bit)
如果像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
更新所有模块两次,以确保完全更正了依赖项。)
这将允许您更新代码的不同部分(不仅是视图/存储过程,还包括中间层类,甚至前端类),以引用正确的名称,而不必一次完成所有操作。Red Gate的SQL提示符具有“智能重命名”功能,这听起来像是您正在寻找的。这不仅会重命名对象,还会重命名其他对象中对该对象的任何引用。这是我工作的公司的商业工具,但有14天的全功能评估期
请参见可能的重复:SQL Server 2012()提供的SQL Server Developer工具(代码为“Juneau”)可能是实现此目的的一种方法。不同意可能的重复。另一个问题的答案似乎主要集中在格式化代码上。我认为这个答案可能更好。虽然公认的答案确实指向了一个可能有用的第三方工具,但肯定有一些警告遗漏了……如果您正在考虑如何重构,这是一本好读物:另请参阅我为MSSQLStips.com编写的提示:谢谢Bertrand先生。让我来解决这个问题。这可能是我想要的答案。谢谢你的留言,大卫。然而,在这一点上,我几乎已经完成了所有的改变——这并不有趣!没问题。SQL搜索是一个在这些情况下也有帮助的免费工具。