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

Wstawianie wyzwalacza SQL z wielu tabel

Nie odwołujesz się do wstawionych lub usuniętych tabel, które są dostępne tylko w wyzwalaczu, więc oczywiście zwracasz więcej rekordów niż potrzebujesz w zapytaniu.

Kiedy po raz pierwszy piszę wyzwalacz, tworzę tabelę tymczasową o nazwie #inserted (i/lub #deleted) i wypełniam ją kilkoma rekordami. Powinien pasować do projektu tabeli, na której będzie aktywowany wyzwalacz. Ważne jest, aby Twoja tabela tymczasowa zawierała kilka rekordów wejściowych, które mogą spełniać różne kryteria wpływające na Twoje zapytanie (więc w Twoim przypadku chcesz mieć niektóre, w których liczba przypadków będzie wynosić 0, a niektóre, w których nie byłoby na przykład) i byłoby to typowe danych wprowadzonych do tabeli lub zaktualizowanych init. Wyzwalacze serwera SQL działają na zestawach danych, dzięki czemu zapewnia to również, że wyzwalacz może prawidłowo obsługiwać wiele wstawek lub aktualizacji rekordów. Prawidłowo napisany wyzwalacz zawierałby przypadki testowe, które musisz przetestować, aby upewnić się, że wszystko dzieje się poprawnie. Twoja tabela #inserted powinna zawierać rekordy, które spełniają wszystkie te przypadki testowe.

Następnie napisz zapytanie w transakcji (i wycofaj je podczas testowania) dołączając do #inserted. Jeśli robisz wstawkę z zaznaczeniem, napisz tylko zaznaczoną część, aż uzyskasz to dobrze, a następnie dodaj wstawkę. Na potrzeby testowania napisz zaznaczenie z tabeli, do której wstawiasz, aby zobaczyć dane wstawione przed wycofaniem.

Gdy wszystko działa, zmień #wstawione referencje na wstawione, usuń dowolny kod testowy i oczywiście wycofanie (być może całą transakcję w zależności od tego, co robisz) i dodaj upuszczenie i utwórz część wyzwalającą kodu. Teraz możesz przetestować wyzwalacz jako wyzwalacz, ale jesteś w dobrej formie, ponieważ wiesz, że prawdopodobnie zadziała na podstawie wcześniejszych testów.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmiana nazwy kolumny bez łamania skryptów i procedur składowanych

  2. Czy SQL Server otacza Select...Insert Queries w niejawną transakcję?

  3. Problemy z edytowaniem rekordów w programie Access / SQL (konflikt zapisu)

  4. NEWID() vs NEWSEQUENTIALID() w SQL Server:jaka jest różnica?

  5. Co to jest impas w SQL Server?