Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Loop in Trigger?

Il tuo primo problema è che non dovresti mai considerare di scorrere un set di record come prima scelta. È quasi sempre la scelta sbagliata come è qui. Il tuo prossimo problema è che i trigger elaborano l'intero set di record non uno alla volta e dalla tua descrizione, scommetto che l'hai scritto supponendo che elaborerebbe un record alla volta. Hai bisogno di un processo basato su set.

Probabilmente hai bisogno di qualcosa di simile nel tuo trigger che inserisca tutti i paesi inseriti che non sono già nella tabella dei paesi (questo presuppone che country_Id sia una colonna di identità intera):

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

Potresti anche utilizzare un processo memorizzato invece di un trigger da inserire nelle tabelle reali dalla tabella di staging.