【发布时间】:2011-03-06 06:37:00
【问题描述】:
我确定这可能是很常见的查询,但目前找不到好的答案。
这是我的问题:
我有一个名为 Contacts 的表,其中包含 varchar 列 Title。现在在开发过程中,我想用 TitleID 替换字段 Title ,它是 ContactTitles 表的外键。目前表 Contacts 有超过 60 个依赖项(其他表、视图函数)。
我怎样才能以最安全和最简单的方式做到这一点?
我们使用:MSSQL 2005,数据已经迁移,只是想改变架构。
编辑:
感谢大家快速重播。
就像提到的那样,Contacts 表有 60 多个依赖项,但是在运行以下查询时,其中只有 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 个视图并手动更新了它们。
【问题讨论】:
-
在 SQL2005 中你需要小心一点。如果任何定义的长度大于 4000 个字符,它们可以分成 2 行,我的帖子中的查询更安全(或者实际上最好使用 sys.sql_modules)。我假设你从不使用
*,这也可能把事情搞砸? -
@Martin Smith 你是对的,但我更关注使用这些列的地方。
-
我的意思是,定义拆分的可能性很小,即一行结束
...Tit,下一个对应行开始le...,因此LIKE 查询将错过它。 -
@Martin Smith,当列被删除并且实体生成器运行时,没有任何投诉(它进行模式验证)。好吧,我可以说这次我很幸运。
标签: sql sql-server-2005 refactoring-databases