2011-12-22 2 views
2

У меня есть записи, которые были импортированы в SQL. Одним из полей «FieldToChage» был ParentID, который ссылался на старое значение ключа. Когда я импортировал данные в SQL, новое значение ключа не соответствует старому значению ключа, содержащемуся в поле «FieldToChage».Как обновить поле ParentID в SQL

Вот упрощенная схема моего импортированной таблицы:

[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

Самый простой способ сделать это, чтобы сделать импорт из двух частей: первая добавление записей, а затем вернуться и назначение столбца родительского идентификатора. Для простоты я буду использовать имена таблиц 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 
0

Самый простой способ исправить это будет импортировать таблицу с идентификацией Insert включена и сохранить значения в столбце идентичности «ID» ,

SET IDENTITY_INSERT zChangeTable ON 
GO 
/* Import the data, including values for ID */ 
GO 
SET IDENTITY_INSERT zChangeTable OFF 
GO 
Смежные вопросы