Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 可以在SQL Server中重构数据库吗?_Visual Studio 2010_Sql Server 2008_Refactoring - Fatal编程技术网

Visual studio 2010 可以在SQL Server中重构数据库吗?

Visual studio 2010 可以在SQL Server中重构数据库吗?,visual-studio-2010,sql-server-2008,refactoring,Visual Studio 2010,Sql Server 2008,Refactoring,我们有一个相对较新的数据库项目,在过去6个月左右的时间里,我们一直在编写视图和存储过程 数据库工作正常 这些观点有效 存储过程可以工作 然而,自从这个项目启动以来,项目的总体范围有了很大的增长,现在一些表名和字段名有点偏离了基准 例如,数据库中的主表名为SheetMetalRequest,但该项目已发展到现在实际的钣金请求只是可枚举请求类型之一。因此,此表中的名称对参与项目的人员具有误导性 除此主表外,其他表中还有许多列也需要更改(例如,想想SheetMetalRequestID) 进行此更

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

  • 数据库工作正常
  • 这些观点有效
  • 存储过程可以工作
然而,自从这个项目启动以来,项目的总体范围有了很大的增长,现在一些表名和字段名有点偏离了基准

例如,数据库中的主表名为
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搜索是一个在这些情况下也有帮助的免费工具。