我有一堆表使用PK列的用户定义数据类型。是否可以使用SQL Server 2005更改此类型?
答案 0 :(得分:3)
我建议总是可以重构糟糕或过时的数据库设计,它只取决于你愿意去做多少工作。
如果您要使用代理键替换用户定义的数据,那么您应该能够简单地更改现有表以包含不可为空的标识列,这应该会导致所有现有记录被分配新密钥自动。
一旦使用唯一ID填充新字段,如果您需要移出并替换此表的外键引用,那么我只需更改这些表以包含新字段并使用如下内容:
UPDATE child_table
SET new_fk_val =
SELECT new_pk_val
FROM parent_table
WHERE parent_table.old_pk_val = child_table.old_fk_val
完成该步骤后,您可以删除旧的外键约束,删除旧的外键列,删除旧的主键列,建立新的主键约束,然后建立新的外键约束。 / p>
当然,如果父版和子表关系的旧版本在子表中有无效记录,则可能需要执行以下操作:
DELETE FROM child_table
WHERE old_fk_val NOT IN
( SELECT old_pk_val FROM parent_table)