2011-12-22 7 views
2

SQLにインポートされたレコードがあります。フィールド 'FieldToChage'の1つは、古いキー値を参照する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

これを行う最も簡単な方法は2つの部分でインポートを行うことです:最初に戻って行くと親ID列を割り当て、その後、レコードを追加します。簡略化のために、私はこの問題を解決する最も簡単な方法が有効アイデンティティインサートを持つテーブルをインポートして、ID列「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

を使用します。

SET IDENTITY_INSERT zChangeTable ON 
GO 
/* Import the data, including values for ID */ 
GO 
SET IDENTITY_INSERT zChangeTable OFF 
GO 
関連する問題