我正在使用旧的SQL Server数据库,该数据库的核心表包含错误的主键。
密钥是NVARCHAR(50)
类型,包含基于表中各种内容的应用程序生成的字符串。出于显而易见的原因,我想将此密钥替换为自动递增(标识)INT
列。
这是一个庞大的数据库,我们正在逐步升级它。我们希望最小化对其他组件写入的表的更改。我想我可以通过以下方式更改表格而不会破坏任何内容:
NOT NULL
第3项证明非常痛苦。因为这是一个核心表,所以其他表的 lot 都有外键约束。要删除现有的主键,我似乎必须删除所有这些外键约束并在之后再次创建它们。
是否有更简单的方法可以执行此操作,还是只需编写所有脚本?
答案 0 :(得分:1)
害怕这是坏消息。我们刚刚完成了一个做同样类型事情的大项目,尽管我们的主管DBA有一些技巧。您可能会查看this之类的内容,以便为翻转开关生成脚本:
答案 1 :(得分:1)
我曾经做过同样的事情并且基本上使用了你描述的过程。除此之外,您必须先访问彼此的表并添加指向基表中新列的新外键
所以我使用的方法是
这是可行的,并不像最初听起来那么难。关键是一系列性质的儿童表的更新声明
Update child_table
set new_column = (select new_primary from base)
where old_primary = old_foreign