sql >> Base de Datos >  >> RDS >> Sqlserver

¿Bucle en Trigger?

Su primer problema es que nunca debe considerar recorrer un conjunto de registros como primera opción. Casi siempre es la elección equivocada como lo es aquí. Su próximo problema es que los desencadenadores procesan todo el conjunto de registros, no uno a la vez y, según su descripción, apuesto a que lo escribió asumiendo que procesaría un registro a la vez. Necesita un proceso basado en conjuntos.

Es probable que necesite algo como esto en su activador que insertaría todos los países que aún no están en la tabla de países (esto supone que country_Id es una columna de identidad de número entero):

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

También podría usar un proceso almacenado en lugar de un activador para insertar en las tablas reales desde la tabla de preparación.