Za pomocą DML wyzwalaczy, obejmujące przekazywanie lub wycofywanie transakcji
W wersjach SQL Server , które są później niż SQL Server w wersja 7.0, liczba transakcji jest zwiększany w instrukcja tylko wtedy, gdy liczba transakcji wynosi 0, w chwili rozpoczęcia wyciągu.W SQL Server w wersja 7.0, liczba transakcji jest zawsze przyrostowo, niezależnie od liczby transakcji na początku instrukcja.Dlatego wartość, która zwraca wyzwalaczy @@ TRANCOUNT może być niższa w wersjach nowszych niż jest w SQL Server 7.0.
W nowszych wersjach instrukcja ZATWIERDZIĆ transakcji lub ZATWIERDZIĆ pracy jest wykonywana w wyzwalacz i ma odpowiednie jawny lub niejawny instrukcja BEGIN TRANSACTION instrukcja na początku wyzwalacza, użytkownicy zobaczyć różne zachowanie niż w SQL Server w wersja 7.0.Nie zaleca się umieszczanie ZATWIERDZIĆ transakcji lub ZATWIERDZIĆ pracy instrukcji w wyzwalacza.
Gdy wyzwalaczy, zawierające instrukcje COMMIT albo TRANSAKCJĘ ROLLBACK są wykonywane z partia, anulowania całej partia.W SQL Server 2008 i SQL Server 2005, jest zwracany błąd.
W poniższym przykładzie Jeśli INSERT pożarów instrukcji wyzwalacz DML TRANSAKCJĘ ROLLBACK, DELETE Instrukcja nie jest wykonywana, ponieważ anulowano partia.
/* Start of Batch */
INSERT employee VALUES ('XYZ12345M', 'New', 'M', 'Employee', 1, 1, '9952', '6/1/95') -- Causes trigger to fire and ROLLBACK TRANSACTION.
DELETE employee WHERE emp_id = 'PMA42628M'
GO
Jeśli wyzwalaczy, zawierające instrukcje TRANSAKCJĘ ROLLBACK są opalane z transakcji zdefiniowanej przez użytkownika, transakcji ROLLBACK wycofuje cała transakcja.W poniższym przykładzie Jeśli INSERT Instrukcja fires wyzwalacz TRANSAKCJĘ ROLLBACK obejmuje UPDATE instrukcji również przywracana jest:
/* Start of Transaction */
BEGIN TRANSACTION
UPDATE employee SET hire_date = '7/1/94' WHERE emp_id = 'VPA30890F'
INSERT employee VALUES ('XYZ12345M', 'New', 'M', 'Employee', 1, 1, '9952', '6/1/95') -- Causes trigger to fire and ROLLBACK TRANSACTION.
Zobacz także