2011-12-22 3 views
2

J'ai des enregistrements qui ont été importés dans SQL. L'un des champs 'FieldToChage' était un ParentID qui faisait référence à une ancienne valeur de clé. Lorsque j'ai importé les données dans SQL, la nouvelle valeur de clé ne correspond pas à l'ancienne valeur de clé contenue dans 'FieldToChage'.Comment mettre à jour le champ ParentID dans SQL

schéma est simplifié Voici ma table importée:

[dbo].[zChangeTable](
     [ID] [int] IDENTITY(1,1) NOT NULL, 
     [FieldToChange] [int] NULL, 
     [OldID] [int] NOT NULL, 

Ce que je besoin est le champ « FieldToChange » (ParentID) pour faire référence à la nouvelle valeur de clé avec l'ancien indice dans le champ « oldid ».

Voici un échantillon des données de table existante:

ID  FieldToChange OldID 
159  NULL   143 
160  143    142 
161  143    145 
25  174    171 
26  174    172 
204  NULL   173 
17  NULL   174 

donc une déclaration de mise à jour est nécessaire qui marche à travers la table et met à jour la « FieldToChange » comme indiqué ci-dessous ...

ID  FieldToChange OldID 
159  NULL   143 
160  159    142 
161  159    145 
25  17    171 
26  17    172 
204  NULL   173 
17  NULL   174 

espoir ce sens ...

merci à l'avance

Répondre

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

Merci cela a parfaitement fonctionné ... – blub

2

le faire comme ceci:

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

La meilleure façon de le faire est de faire l'importation en deux parties: tout d'abord ajouter les enregistrements, puis revenir en arrière et attribuer la colonne ID parent. Par souci de simplicité, je vais utiliser les noms de table OldTable et 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

La meilleure façon de résoudre ce problème serait d'importer la table avec l'identité d'insertion permis et de préserver les valeurs de la colonne d'identité « ID » .

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