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

SQL Server — po wstawieniu/do wstawienia — wycofanie

Twój INSERT Instrukcja zawsze działa w transakcji — albo została zdefiniowana jawnie, albo jeśli nie, to SQL Server użyje transakcji niejawnej.

Wstawiasz jeden (lub wiele) wierszy do tabeli. Następnie - nadal wewnątrz transakcji - AFTER INSERT wyzwalacz uruchamia i sprawdza określone warunki - zwykle przy użyciu Inserted pseudotabela dostępna wewnątrz wyzwalacza, która zawiera wstawione wiersze.

Jeśli zadzwonisz ROLLBACK TRANSACTION w wyzwalaczu, a następnie tak – transakcja, ze wszystkim, co robiła, jest cofana i to tak, jakby to INSERT nigdy się nie zdarzyło - nic nie pojawia się w tabeli bazy danych.

Także:FOR INSERT jest tym samym co AFTER INSERT w SQL Server - wyzwalacz jest wykonywany po INSERT oświadczenie spełniło swoje zadanie.

Należy pamiętać o jednej rzeczy (co wielu programistów się myli):wyzwalacz jest uruchamiany raz na instrukcję - NIE raz w rzędzie! Jeśli więc wstawisz 20 wierszy naraz, wyzwalacz zostanie wyzwolony raz i Inserted pseudotabela wewnątrz wyzwalacza zawiera 20 wierszy. Musisz wziąć to pod uwagę podczas pisania wyzwalacza - nie zawsze mamy do czynienia z wstawianiem tylko jednego wiersza!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rzeczywiste a zmiennoprzecinkowe a pieniądze

  2. Błędnie obliczona liczba tygodni i częściowych tygodni między dwoma dniami

  3. Czy to rozwiązanie rekurencyjne można zapisać w zapytaniu T-SQL przy użyciu CTE lub OVER?

  4. Zliczanie liczby wierszy zwracanych przez procedurę składowaną

  5. Dlaczego serwer SQL zgłasza ten błąd:nie można wstawić wartości NULL do kolumny „id”?