我有表A包含父/子记录。我有引用表A的表B.该外键未被强制执行。我正在做批量删除/插入来更新子记录以指向正确的父项。这将分配子记录新的主键,我需要也在表B中更新。批量删除/插入后更新外键表引用?
有没有办法做到这一点,而不使用游标或按行处理行?
我有表A包含父/子记录。我有引用表A的表B.该外键未被强制执行。我正在做批量删除/插入来更新子记录以指向正确的父项。这将分配子记录新的主键,我需要也在表B中更新。批量删除/插入后更新外键表引用?
有没有办法做到这一点,而不使用游标或按行处理行?
你可以发布一些示例数据,以及它应该如何纠正?没有看到实际的表格模式,我只能做出一些假设,所以这可能无法完美工作:
select PrimaryKeyField AS RowID, ChildKeyField AS OldChildID, newid() AS NewChildID
into #UpdateTable
from TableA
where SomeConditionToSelectTheChildRecords
update TableA
set TableA.ChildKeyField = #UpdateTable.NewChildID
from TableA
inner join #UpdateTable on TableA.PrimaryKeyField = #UpdateTable.RowID
update TableB
set TableB.ChildKeyField = #UpdateTable.NewChildID
from TableB
inner join #UpdateTable on TableB.ChildKeyField = #UpdateTable.OldChildID
注意我实际上是删除表A中的行,然后重新添加它。 – Kenoyer130 2013-04-22 17:11:41
是否真的需要先删除行?似乎你可以更新它们,或者我误解了这个问题。 – McCee 2013-04-22 17:15:52
是否有特定原因触发器无法使用?您的批量更新是否为未记录的操作? – 2013-04-22 16:12:28
其一次性补丁脚本。 – Kenoyer130 2013-04-22 16:58:35