将自然键更改为代理键

时间:2014-08-26 13:27:57

标签: sql-server migration

我有两个表,一个女主键是自然的,另一个引用第一个(所以引用自然键)。现在我必须对系统的那一部分进行一些改动,首先我要用代理键替换自然键(这将简化事情)。

我已编写了大部分迁移脚本,但我无法弄清楚如何填充新的参考列。

让我用例子来说明我的意思。

naturalKeyedTable
(
    newPk UNIQUEIDENTIFIER
    myOldPk VARCHAR(10)
    --other unimportant columns
)

referenceTable
(
    newFK UNIQUEIDENTIFIER
    oldFK VARCHAR(10)
)

我已使用以下SQL填充newPk列

UPDATE naturalKeyedTable
SET newPk = NEWID()

现在我还需要填充newFK列。我无法弄清楚所需的sql。

我已经按照

的方式做了些什么
UPDATE referenceTable
SET newFK = SELECT TOP 1 newPk FROM naturalKeyedTable WHERE oldFK = myOldPk 

1 个答案:

答案 0 :(得分:3)

更像这样的东西。

update rt
set newFK = newPK
from referenceTable rt
join naturalKeyedTable nkt on nkt.myOldPk = rt.oldFK

这里要小心。你的新主键是一个guid。我希望您有另一个列可以用作您的群集密钥。作为聚集索引的GUID列将达到99%的碎片,只有几千行,除非你经常对这个索引进行碎片整理,否则你的性能会很糟糕。