我有两个表,一个女主键是自然的,另一个引用第一个(所以引用自然键)。现在我必须对系统的那一部分进行一些改动,首先我要用代理键替换自然键(这将简化事情)。
我已编写了大部分迁移脚本,但我无法弄清楚如何填充新的参考列。
让我用例子来说明我的意思。
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
答案 0 :(得分:3)
更像这样的东西。
update rt
set newFK = newPK
from referenceTable rt
join naturalKeyedTable nkt on nkt.myOldPk = rt.oldFK
这里要小心。你的新主键是一个guid。我希望您有另一个列可以用作您的群集密钥。作为聚集索引的GUID列将达到99%的碎片,只有几千行,除非你经常对这个索引进行碎片整理,否则你的性能会很糟糕。