Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Bouclage dans le déclencheur ?

Votre premier problème est que vous ne devriez jamais envisager de boucler un jeu d'enregistrements comme premier choix. C'est presque toujours le mauvais choix comme c'est le cas ici. Votre prochain problème est que les déclencheurs traitent l'ensemble des enregistrements, pas un à la fois et d'après votre description, je parie que vous l'avez écrit en supposant qu'il traiterait un enregistrement à la fois. Vous avez besoin d'un processus basé sur un ensemble.

Vous avez probablement besoin de quelque chose comme ceci dans votre déclencheur qui insérerait tous les pays insérés qui ne sont pas déjà dans la table des pays (cela suppose que country_Id est une colonne d'identité entière) :

Insert country (country_name)
select country_name 
from inserted i
where not exists 
  (select * from country c 
   where c.country_name = i.country_name)

Vous pouvez également utiliser une procédure stockée au lieu d'un déclencheur à insérer dans les tables réelles à partir de la table intermédiaire.