SQL,如何更改SQL表中的列而不破坏其他依赖项?

cin*_*nek 5 sql sql-server-2005 refactoring-databases

我相信这可能是相当常见的查询,但现在找不到好的答案.

这是我的问题:

我有一个名为Contacts with varchar column Title的表.现在在开发过程中,我想用TitleID替换字段Title,TitleIDContactTitles表的外键.目前,表Contacts有超过60个依赖项(其他表,视图函数).

我怎样才能以最安全,最简单的方式做到这一点?

我们使用:MSSQL 2005,数据已经被迁移,只想更改架构.

编辑:

感谢All快速重播.

就像它提到的那样,Contacts表有超过60个dependents,但是当运行以下查询时,只有5个使用Title列.迁移脚本已运行,因此无需更改数据.

/*gets all objects which use specified column */

SELECT Name FROM syscomments sc JOIN sysobjects so ON sc.id = so.id WHERE TEXT LIKE '%Title%' AND TEXT LIKE '%TitleID%'

然后我浏览了这5个视图并手动更新了它们.

Mar*_*ith 1

对于 Microsoft SQL Server Redgate 有一个(非免费)产品可以帮助进行此重构http://www.red-gate.com/products/sql_refactor/index.htm

在过去,我可以通过简单地获取要审查的事项列表来非常轻松地(如果是原始的)做到这一点

SELECT * FROM sys.objects
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Contacts%' 
Run Code Online (Sandbox Code Playgroud)

(并且可能考虑依赖关系信息并按对象类型进行过滤)

在 Management Studio 中编写所有感兴趣的脚本,然后简单地查看列表并查看所有内容并将 CREATE 更改为 ALTER。即使对于 60 个可能的依赖项,这也应该是一个非常简单且重复的更改。此外,如果您引用不存在的列,则在运行脚本进行 ALTER 时应该会收到错误消息。

如果您*在应用程序中的查询或即席 SQL 中使用,显然事情可能会更困难一些。