Bonjour je vous explique mon probleme
je souhaite comparer deux tables aux champs identiques, et insérer dans une autre table les champs qui ont été modifiés avec la date de la comparaison, et le type de modification.
J'ai donc fait un couple insert / update pour chaque champs de mes tables, et ca marche. J'ai intégré cela dans un lot DTS.
Pour les nouvelles entrées (symétrique pour entrée supprimée)
Code :
- INSERT INTO HISTO (champs1..ChampsN)
- SELECT *
- FROM IMPORT
- WHERE IMPORT.champs1 NOT IN
- (SELECT TRAVAIL.champs1 FROM TRAVAIL)
- UPDATE HISTO
- SET dateCourante=GETDATE(),commentaire='Nouvelle Entrée'
- WHERE dateCourante IS NULL
|
Pour les modifications
Code :
- INSERT INTO HISTO (champs1..ChampsN)
- SELECT I.champs1,..,I.champsN
- FROM IMPORT I, TRAVAIL T
- WHERE I.champs1=T.champs1 AND I.champs2!=T.champs2
- UPDATE HISTO
- SET dateCourante=GETDATE(),commentaire='Modification champs2'
- WHERE dateCourante IS NULL
|
Mais comme j'ai beaucoup de champs dans ces tables, je trouve fastidieux de devoir retaper N fois les même lignes, d'autant plus que si des champs changent il faut faire pleins de modifications.
je pense donc faire une boucle mais il me manque encore des notions
Code :
- DECLARE @champs nvarchar(30) #pour stocker le nom du champs
- DECLARE @numeroChamps numeric(9) #pour stocker le numéro du champs
- @numeroChamps=2 #je ne veux pas qu'on commence au premier champs car traitement particulier
- WHILE (il reste des champs)
- BEGIN
- INSERT INTO HISTO (champs1..ChampsN)
- SELECT I.champs1,..,I.champsN
- FROM IMPORT I, TRAVAIL T
- WHERE I.champs1=T.champs1 AND I.@champs!=T.@champs
- UPDATE HISTO
- SET dateCourante=GETDATE(),commentaire='Modification '+@champs
- WHERE dateCourante IS NULL
- @numeroChamps+=1
- END
|
merci d'avance si vous pouvez m'aidé
Message édité par rigo le 27-07-2004 à 13:11:33