2011-12-22 51 views
2

我有一些記錄被導入到SQL中。其中一個字段'FieldToChage'是一個引用舊密鑰值的ParentID。當我將數據導入到SQL時,新的鍵值與'FieldToChage'中包含的舊鍵值不一致。如何更新SQL中的ParentID字段

這裏被簡化進口我的表的模式:

[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 

希望這是有道理...

在此先感謝

回答

2
UPDATE t 
SET t.FieldToChange = t1.ID 
FROM zChangeTable t JOIN zChangeTable t1 ON t.FieldToChange = t1.OldID 
+0

感謝這工作完美... – blub

2

做這樣的:

update zChangeTable 
set t1.FieldToChange = t2.ID 
from zChangeTable t1 
inner join zChangeTable t2 on t1.FieldToChange = t2.OldID 
1

要做到這一點,最簡單的方法是做進口分爲兩個部分:第一添加記錄,然後回去和分配父ID列。爲了簡便起見,我將使用表名OldTableNewTable

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 
0

來解決,這將是進口啓用標識插入表並保留值標識列「ID」的最簡單方法。

SET IDENTITY_INSERT zChangeTable ON 
GO 
/* Import the data, including values for ID */ 
GO 
SET IDENTITY_INSERT zChangeTable OFF 
GO