Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Warehouse no Microsoft Fabric
Banco de dados SQL no Microsoft Fabric
Define o BEGIN TRANSACTION modo como implícito, para a conexão.
Convenções de sintaxe de Transact-SQL
Sintaxe
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Comentários
Quando ON, o sistema está em modo de transação implícita . Isso significa que se @@TRANCOUNT = 0, qualquer uma das seguintes instruções Transact-SQL inicia uma nova transação. É equivalente a um invisível BEGIN TRANSACTION ser executado primeiro:
ALTER TABLEBEGIN TRANSACTIONCREATEDELETEDROPFETCHGRANTINSERTMERGEOPENREVOKE-
SELECT( Veja observação esclarecedora) TRUNCATE TABLEUPDATE
Quando OFF, cada uma das instruções T-SQL anteriores é limitada por uma instrução invisível BEGIN TRANSACTION e uma invisible COMMIT TRANSACTION . Quando OFF, dizemos que o modo de transação é autocommit. Se seu código T-SQL emitir visivelmente um BEGIN TRANSACTION, dizemos que o modo de transação é explícito.
Há vários pontos esclarecedores para entender:
Quando o modo de transação está implícito, nenhum unseen
BEGIN TRANSACTIONé emitido, se@@TRANCOUNT > 0já for. No entanto, quaisquer afirmações explícitasBEGIN TRANSACTIONainda incrementam@@TRANCOUNT.Quando suas
INSERTextrações e qualquer outra coisa da sua unidade de trabalho estiverem concluídas, você deve emitirCOMMIT TRANSACTIONextratos até@@TRANCOUNTque seja decrementada de volta a 0. Ou você pode emitir umROLLBACK TRANSACTION.
SELECTInstruções que não selecionam de uma tabela não iniciam transações implícitas. Por exemplo,SELECT GETDATE();ouSELECT 1, 'ABC';não exigem transações.Transações implícitas podem ser
ONinesperadamente devido a inadimplências ANSI. Para obter detalhes, consulte SET ANSI_DEFAULTS.Configurar
IMPLICIT_TRANSACTIONSparaONnão é popular. Na maioria dos casos ondeIMPLICIT_TRANSACTIONSéON, é porqueSET ANSI_DEFAULTS ONfoi definido.O Provedor de Base de Dados OLE para SQL Server Native Client do SQL Server e o driver ODBC do SQL Server Native Client são automaticamente configurados
IMPLICIT_TRANSACTIONSparaOFFao conectar. DefinaIMPLICIT_TRANSACTIONSos padrões paraOFFconexões com o provedor gerenciado SQLClient e para requisições SOAP recebidas via endpoints HTTP.
Para visualizar a configuração atual de IMPLICIT_TRANSACTIONS, execute a seguinte consulta.
DECLARE @IMPLICIT_TRANSACTIONS AS VARCHAR (3) = 'OFF';
IF ((2 & @@OPTIONS) = 2)
SET @IMPLICIT_TRANSACTIONS = 'ON';
SELECT @IMPLICIT_TRANSACTIONS AS IMPLICIT_TRANSACTIONS;
Exemplos
O script Transact-SQL a seguir é executado em alguns casos de teste diferentes. A saída de texto também é fornecida, mostrando o comportamento detalhado e os resultados de cada caso de teste.
-- Preparations.
SET NOCOUNT ON;
SET IMPLICIT_TRANSACTIONS OFF;
GO
WHILE (@@TRANCOUNT > 0) COMMIT TRANSACTION;
GO
IF (OBJECT_ID(N'dbo.t1',N'U') IS NOT NULL) DROP TABLE dbo.t1;
GO
CREATE table dbo.t1 (a INT);
GO
PRINT N'-------- [Test A] ---- OFF ----';
PRINT N'[A.01] Now, SET IMPLICIT_TRANSACTIONS OFF.';
PRINT N'[A.02] @@TRANCOUNT, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
SET IMPLICIT_TRANSACTIONS OFF;
GO
INSERT INTO dbo.t1 VALUES (11);
INSERT INTO dbo.t1 VALUES (12);
PRINT N'[A.03] @@TRANCOUNT, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N' ';
PRINT N'-------- [Test B] ---- ON ----';
PRINT N'[B.01] Now, SET IMPLICIT_TRANSACTIONS ON.';
PRINT N'[B.02] @@TRANCOUNT, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
SET IMPLICIT_TRANSACTIONS ON;
GO
INSERT INTO dbo.t1 VALUES (21);
INSERT INTO dbo.t1 VALUES (22);
PRINT N'[B.03] @@TRANCOUNT, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
COMMIT TRANSACTION;
PRINT N'[B.04] @@TRANCOUNT, after COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N' ';
PRINT N'-------- [Test C] ---- ON, then BEGIN TRAN ----';
PRINT N'[C.01] Now, SET IMPLICIT_TRANSACTIONS ON.';
PRINT N'[C.02] @@TRANCOUNT, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
SET IMPLICIT_TRANSACTIONS ON;
GO
BEGIN TRANSACTION;
INSERT INTO dbo.t1 VALUES (31);
INSERT INTO dbo.t1 VALUES (32);
PRINT N'[C.03] @@TRANCOUNT, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
COMMIT TRANSACTION;
PRINT N'[C.04] @@TRANCOUNT, after a COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
COMMIT TRANSACTION;
PRINT N'[C.05] @@TRANCOUNT, after another COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N' ';
PRINT N'-------- [Test D] ---- ON, INSERT, BEGIN TRAN, INSERT ----';
PRINT N'[D.01] Now, SET IMPLICIT_TRANSACTIONS ON.';
PRINT N'[D.02] @@TRANCOUNT, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
SET IMPLICIT_TRANSACTIONS ON;
GO
INSERT INTO dbo.t1 VALUES (41);
BEGIN TRANSACTION;
INSERT INTO dbo.t1 VALUES (42);
PRINT N'[D.03] @@TRANCOUNT, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
COMMIT TRANSACTION;
PRINT N'[D.04] @@TRANCOUNT, after a COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
COMMIT TRANSACTION;
PRINT N'[D.05] @@TRANCOUNT, after another COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
-- Clean up.
SET IMPLICIT_TRANSACTIONS OFF;
GO
WHILE (@@TRANCOUNT > 0) COMMIT TRANSACTION;
GO
DROP TABLE dbo.t1;
GO
Next é a saída de texto do script Transact-SQL anterior.
-------- [Test A] ---- OFF ----
[A.01] Now, SET IMPLICIT_TRANSACTIONS OFF.
[A.02] @@TRANCOUNT, at start, == 0
[A.03] @@TRANCOUNT, after INSERTs, == 0
-------- [Test B] ---- ON ----
[B.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[B.02] @@TRANCOUNT, at start, == 0
[B.03] @@TRANCOUNT, after INSERTs, == 1
[B.04] @@TRANCOUNT, after COMMIT, == 0
-------- [Test C] ---- ON, then BEGIN TRAN ----
[C.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[C.02] @@TRANCOUNT, at start, == 0
[C.03] @@TRANCOUNT, after INSERTs, == 2
[C.04] @@TRANCOUNT, after a COMMIT, == 1
[C.05] @@TRANCOUNT, after another COMMIT, == 0
-------- [Test D] ---- ON, INSERT, BEGIN TRAN, INSERT ----
[D.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[D.02] @@TRANCOUNT, at start, == 0
[D.03] @@TRANCOUNT, after INSERTs, == 2
[D.04] @@TRANCOUNT, after a COMMIT, == 1
[D.05] @@TRANCOUNT, after another COMMIT, == 0
Conteúdo relacionado
- ALTER TABLE (Transact-SQL)
- INICIAR TRANSAÇÃO (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- DELETE (Transact-SQL)
- DROP TABLE (Transact-SQL)
- FETCH (Transact-SQL)
- GRANT (Transact-SQL)
- INSERT (Transact-SQL)
- MERGE (Transact-SQL)
- ABERTO (Transact-SQL)
- REVOKE (Transact-SQL)
- SELECT (Transact-SQL)
- SET Instruções (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- @@TRANCOUNT (Transact-SQL)
- TRUNCATE TABLE (Transact-SQL)
- UPDATE (Transact-SQL)