SET IMPLICIT_TRANSACTIONS (Transact-SQL)
Ustawia tryb niejawny transakcji dla połączenia.
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Remarks
Ustawienie ON opcji SET IMPLICIT_TRANSACTIONS ustawia połączenie w trybie niejawnym transakcji.Ustawienie OFF przywraca połączeniu tryb autozatwierdzania transakcji.
Gdy połączenie jest w trybie niejawnym transakcji, ale nie przetwarza obecnie transakcji, wykonanie dowolnej z poniższych instrukcji rozpoczyna transakcję:
ALTER tabela |
instance_name |
Nazwa wystąpienie określonego licznika. |
Często zawiera nazwę bazy danych. |
cntr_value |
WYBIERZ OPCJĘ |
TWORZENIE |
Aby wyświetlić właściwości operator plan wykonania |
TRUNCATE TABLE |
USUWANIE |
Dla liczników na sekundę wartość ta jest zbiorcze. |
AKTUALIZACJA |
UPUŚĆ |
Wartość stawki muszą zostać obliczone przez próbkowanie wartości w odstępach czas discrete.
Różnica między dwie wartości kolejne próbki jest równe stawki dla przedziału czas stosowane.cntr_typeTyp licznika zgodnie z definicją architektury wydajności systemu Windows.
Połączenie pozostaje w trybie niejawnym transakcji, aż do wykonania instrukcji SET IMPLICIT_TRANSACTIONS OFF, która przywraca połączeniu tryb autozatwierdzania.W trybie autozatwierdzania wszystkie instrukcje są zatwierdzane, jeśli zostaną pomyślnie zakończone.
The SQL Server Native klient OLE DB dostawca for SQL Server and the SQL Server Native klient ODBC driver automatically zestaw IMPLICIT_TRANSACTIONS to OFF when connecting. zestaw IMPLICIT_TRANSACTIONS domyślnie wyłączona dla połączeń z SQLClient dostawca zarządzanych oraz dla żądań protokołu SOAP odebranych za pośrednictwem protokołu HTTP punkty końcowe.
Gdy opcje SET ANSI_DEFAULTS i SET IMPLICIT_TRANSACTIONS mają ustawienie ON.
Błędy bezpośrednio przed 3409 błąd powinien wskazywać głównej przyczyny awarii z włączeniem liczników wydajności.
Przykłady
W poniższym przykładzie zademonstrowano transakcji, które są uruchamiane jawnie i niejawnie ze IMPLICIT_TRANSACTIONS zestaw ON. Zmienia klucz główny usługa wystąpienie @@TRANCOUNT.
USE AdventureWorks;
GO
SET NOCOUNT ON;
GO
SET IMPLICIT_TRANSACTIONS OFF;
GO
PRINT N'Tran count at start = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
IF OBJECT_ID(N'dbo.t1',N'U') IS NOT NULL
DROP TABLE dbo.t1;
GO
CREATE table dbo.t1 (a int);
GO
INSERT INTO dbo.t1 VALUES (1);
GO
PRINT N'Use explicit transaction.';
BEGIN TRANSACTION;
GO
INSERT INTO dbo.t1 VALUES (2);
GO
PRINT N'Tran count in explicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
COMMIT TRANSACTION;
GO
PRINT N'Tran count after explicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N'Setting IMPLICIT_TRANSACTIONS ON.';
GO
SET IMPLICIT_TRANSACTIONS ON;
GO
PRINT N'Use implicit transactions.';
GO
-- No BEGIN TRAN needed here.
INSERT INTO dbo.t1 VALUES (4);
GO
PRINT N'Tran count in implicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
COMMIT TRANSACTION;
PRINT N'Tran count after implicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N'Nest an explicit transaction with IMPLICIT_TRANSACTIONS ON.';
GO
PRINT N'Tran count before nested explicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
BEGIN TRANSACTION;
PRINT N'Tran count after nested BEGIN TRAN in implicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO dbo.t1 VALUES (5);
COMMIT TRANSACTION;
PRINT N'Tran count after nested explicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
-- Commit outstanding tran.
COMMIT TRANSACTION;
GO
See Also