1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| SELECT *, 0 AS OK
INTO ##UPDSTAT
FROM ##TABLE_TEMP
where tiersID not in (select tiersID from ##TABLE_TEMP_Erreurs)
-- on commence les verifications, et les insertions
while exists(SELECT * FROM ##UPDSTAT WHERE OK = 0)
begin
-- on démarre une transaction par occurence
begin transaction @nomTransaction
set @errors=0;
-- dans un premier temps, on recupere l'ensemble des informations de la table temporaire
SELECT TOP 1 @tiersID = tiersID, raison_sociale = @raisonsociale
FROM ##UPDSTAT WHERE OK = 0 ORDER BY 1;
print 'On traite : '+cast(@tiersID as varchar(50));
if exists(select * from TABLE_A where tiersID = @tiersID)
begin
-- maj de la table
update TABLE_A
set raison_sociale = @raisonsociale
where tiersID = @tiersID;
set @errors = @errors + @@ERROR --On additionne l'erreur liée à la dernière requête SQL dans notre variable
end
else
begin
-- creation de l'info
insert into TABLE_A(tiersID, raison_sociale)
values (@tiersID, @raisonsociale);
set @errors = @errors + @@ERROR --On additionne l'erreur liée à la dernière requête SQL dans notre variable
end
UPDATE ##UPDSTAT SET OK = 1 WHERE tiersID = @tiersID
set @errors = @errors + @@ERROR --On additionne l'erreur liée à la dernière requête SQL dans notre variable
-- on verifie si l'on a eu des erreurs ou non, si oui on exporte un fichier d'erreurs sinon on commit les modifications
-- si errors est égale à 0, il n'y a eu aucune erreur, on commit la transaction
if @errors = 0
begin
commit transaction @nomTransaction
end
else
begin
-- on annule tous les changements de cette transaction
rollback transaction @nomTransaction
-- on insère toutes les donnees de la table temporaire dans la table temporaire d'erreurs
insert into ##TABLE_TEMP_Erreurs(tiersID,raison_sociale)
values (@tiersID,@raisonsociale)
end
end --fin boucle |