Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Loop no gatilho?


Seu primeiro problema é que você nunca deve considerar fazer um loop em um conjunto de registros como primeira escolha. É quase sempre a escolha errada como é aqui. Seu próximo problema é que aciona todo o conjunto de registros, não um de cada vez e, pela sua descrição, aposto que você o escreveu assumindo que processaria um registro de cada vez. Você precisa de um processo baseado em conjunto.

Provavelmente você precisa de algo assim em seu gatilho, que inseriria todos os países inseridos que ainda não estão na tabela de países (isso pressupõe que country_Id seja uma coluna de identidade inteira):
Insert country (country_name)
select country_name 
from inserted i
where not exists 
  (select * from country c 
   where c.country_name = i.country_name)

Você também pode usar um proc armazenado em vez de um gatilho para inserir nas tabelas reais da tabela de preparo.