Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapętlenie w wyzwalaczu?

Twoje pierwsze problemy polegają na tym, że nigdy nie powinieneś rozważać pętli przez zestaw rekordów jako pierwszego wyboru. Prawie zawsze jest to zły wybór, tak jak tutaj. Twój następny problem polega na tym, że wyzwala przetwarza cały zestaw rekordów, a nie jeden na raz iz twojego opisu założę się, że napisałeś go, zakładając, że przetwarzałby jeden rekord na raz. Potrzebujesz procesu opartego na zbiorach.

Prawdopodobnie potrzebujesz czegoś takiego w wyzwalaczu, który wstawi wszystkie wstawione kraje, których nie ma jeszcze w tabeli krajów (przy założeniu, że country_Id jest kolumną z tożsamością całkowitą):

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

Możesz również użyć zapisanego procesu zamiast wyzwalacza, aby wstawić do rzeczywistych tabel z tabeli pomostowej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najbardziej efektywny sposób na ograniczenie liczby wierszy zwracanych z zapytania składającego — TSQL

  2. Wdrażanie LocalDB na komputerze klienckim

  3. Instalowanie wystąpienia klastra pracy awaryjnej programu SQL Server — część 1

  4. Korzystasz z 3 aktualizacji w tej samej procedurze sklepu? Mały błąd

  5. Nie można załadować biblioteki DLL „SqlServerSpatial.dll”