Transakcje autocommit
tryb automatycznego zatwierdzania jest domyślny tryb zarządzania transakcji z SQL Server Database Engine. Co Transact-SQL Instrukcja jest zatwierdzona lub wycofywany po jej zakończeniu. instrukcja pomyślnie wykona jest zatwierdzona; w przypadku napotkania każdy błąd jest jej wycofania.Połączenie z wystąpienie Database Engine działa tryb automatycznego zatwierdzania za każdym razem, gdy ten tryb domyślny nie został zastąpiony przez jawne lub niejawne transakcji. tryb automatycznego zatwierdzania jest także tryb domyślny dla obiektów ADO, ODBC, OLE DB i biblioteki bazy danych.
Połączenie z wystąpienie Database Engine działa tryb automatycznego zatwierdzania, dopóki nie rozpocznie się instrukcja BEGIN TRANSACTION Transakcja jawna, or transakcja niejawna jest ustawiany.Gdy transakcja jawna jest przekazana lub wycofana, lub gdy tryb transakcja niejawna jest wyłączony, połączenie powróci do tryb automatycznego zatwierdzania.
Gdy zestaw ON, IMPLICIT_TRANSACTIONS ustawia połączenie trybie transakcja niejawna.counter_name
Kompilacji i uruchom-czas błędy
tryb automatycznego zatwierdzania czasami występuje w przypadku wystąpienie Database Engine została przywrócona partia całego zamiast tylko jedną instrukcję SQL. Dzieje się tak, jeśli wystąpił błąd jest błąd kompilacji, nie jest błąd czas wykonywania.Błąd kompilacji uniemożliwia Database Engine z budynku plan wykonania, to nic w partia jest wykonywany. Mimo że wydaje się, że wszystkie instrukcje przed wygenerowaniem błędu aktualnie zostały wycofane, błąd uniemożliwił w partia z aktualnie wykonywane.W tym przykładzie żadna z instrukcji INSERT w trzecim partia są wykonywane z powodu błędu kompilacji.Wydaje się, że dwa pierwsze instrukcji INSERT jest wycofywany po nigdy nie są one wykonywane.
USE AdventureWorks;
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBatch VALUSE (3, 'ccc'); -- Syntax error.
GO
SELECT * FROM TestBatch; -- Returns no rows.
GO
W tym przykładzie trzecia instrukcja INSERT generuje wykonywania zduplikowane podstawowego klucz błąd.Są dwa pierwsze instrukcji INSERT udane, jak i zatwierdzone, dzięki czemu pozostaną po błąd czas wykonania.
USE AdventureWorks;
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBatch VALUES (1, 'ccc'); -- Duplicate key error.
GO
SELECT * FROM TestBatch; -- Returns rows 1 and 2.
GO
The Database Engine uses deferred name resolution, in which object names are not resolved until execution czas. W tym przykładzie dwa pierwsze instrukcji INSERT są wykonywane i zatwierdzone i te dwa wiersze pozostają w TestBatch Tabela po trzecia instrukcja INSERT generuje błąd czas wykonania, odwołując się do tabeli, która nie istnieje.
USE AdventureWorks;
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBch VALUES (3, 'ccc'); -- Table name error.
GO
SELECT * FROM TestBatch -- Returns rows 1 and 2.
GO