我有一些导入SQL的记录。其中一个字段'FieldToChage'是引用旧键值的ParentID。当我将数据导入SQL时,新键值与“FieldToChage”中包含的旧键值不对应。
以下是我导入的表的简化架构:
[dbo].[zChangeTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FieldToChange] [int] NULL,
[OldID] [int] NOT NULL,
我需要的是标题为'FieldToChange'(ParentID)的字段,用字段'OldID'中的旧索引引用新的键值。
以下是现有表格数据的示例:
ID FieldToChange OldID
159 NULL 143
160 143 142
161 143 145
25 174 171
26 174 172
204 NULL 173
17 NULL 174
因此需要一个更新语句,它会遍历表并更新'FieldToChange',如下所示......
ID FieldToChange OldID
159 NULL 143
160 159 142
161 159 145
25 17 171
26 17 172
204 NULL 173
17 NULL 174
希望这是有道理的......
提前致谢
答案 0 :(得分:2)
UPDATE t
SET t.FieldToChange = t1.ID
FROM zChangeTable t JOIN zChangeTable t1 ON t.FieldToChange = t1.OldID
答案 1 :(得分:2)
这样做:
update zChangeTable
set t1.FieldToChange = t2.ID
from zChangeTable t1
inner join zChangeTable t2 on t1.FieldToChange = t2.OldID
答案 2 :(得分:1)
最简单的方法是分两部分进行导入:首先添加记录,然后返回并分配父ID列。为简单起见,我将使用表名OldTable
和NewTable
insert into NewTable
(
OldID
)
select
ID
from OldTable
update nt set
FieldToChange = ntp.ID
from NewTable nt
join OldTable ot on ot.ID = nt.OldID
join NewTable ntp on ntp.OldID = ot.ParentID
答案 3 :(得分:0)
解决此问题的最简单方法是导入启用了Identity Insert的表,并保留标识列“ID”中的值。
SET IDENTITY_INSERT zChangeTable ON
GO
/* Import the data, including values for ID */
GO
SET IDENTITY_INSERT zChangeTable OFF
GO