Udostępnij za pośrednictwem


Za pomocą wyzwalaczy DML, obejmujące zatwierdzanie lub ROLLBACK TRANSACTION

W wersjach SQL Server które są późniejsze niż SQL Server w wersja 7.0, liczba transakcji jest zwiększany w ramach instrukcja tylko wtedy, gdy liczba transakcji wynosi 0, na początku instrukcja. W SQL Server w wersja 7.0, liczba transakcji jest zawsze incremented, niezależnie od liczby transakcji w momencie rozpoczęcia w instrukcja. Dlatego wartość, która zwraca wyzwalacze @@ TRANCOUNT może być niższa w wersjach nowszych niż w SQL Server 7.0.

W nowszych wersjach gdy przekazywać transakcję lub instrukcji zatwierdzanie praca jest wykonywana w wyzwalacz, a nie ma żadnych odpowiedniej jawny lub niejawny instrukcji BEGIN TRANSACTION instrukcji na początku wyzwalacza, użytkownicy mogą widzieć różne zachowanie niż w SQL Server w wersja 7.0. Nie zaleca się umieszczanie zatwierdzanie TRANSACTION lub praca zatwierdzanie instrukcji w wyzwalacza.

Gdy wyzwalaczy, które zawierają instrukcje zatwierdzanie lub ROLLBACK TRANSACTION są wykonywane z partia, ich anulować całej partia.W SQL Server 2008 i SQL Server 2005, zostanie zwrócony błąd.

W poniższym przykładzie Jeżeli INSERT Instrukcja uruchomieniu wyzwalacz DML, który zawiera ROLLBACK TRANSACTION DELETE Instrukcja nie jest wykonywana, ponieważ partia został anulowany.

/* 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, które zawierają instrukcje ROLLBACK TRANSACTION jest uruchamiany z w transakcji zdefiniowanej przez użytkownika, cała transakcja powoduje powrót ROLLBACK TRANSACTION.W poniższym przykładzie Jeżeli INSERT Instrukcja uruchomieniu wyzwalacza, który zawiera ROLLBACK TRANSACTION UPDATE Instrukcja również zostanie przywrócona:

/* 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.