Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Trigger einschleifen?

Ihr erstes Problem ist, dass Sie niemals als erste Wahl das Durchlaufen eines Datensatzes in Betracht ziehen sollten. Es ist fast immer die falsche Wahl, wie es hier der Fall ist. Ihr nächstes Problem ist, dass Trigger den gesamten Satz von Datensätzen nicht einzeln verarbeitet, und aufgrund Ihrer Beschreibung wette ich, dass Sie es in der Annahme geschrieben haben, dass es jeweils einen Datensatz verarbeiten würde. Sie benötigen einen satzbasierten Prozess.

Wahrscheinlich benötigen Sie so etwas in Ihrem Trigger, der alle Länder einfügen würde, die noch nicht in der Ländertabelle enthalten sind (dies setzt voraus, dass country_Id eine ganzzahlige Identitätsspalte ist):

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

Sie könnten auch eine gespeicherte Prozedur anstelle eines Triggers verwenden, um sie aus der Staging-Tabelle in die realen Tabellen einzufügen.