다음을 통해 공유


SET IMPLICIT_TRANSACTIONS(Transact-SQL)

연결에 대해 암시적 트랜잭션 모드를 설정합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

SET IMPLICIT_TRANSACTIONS { ON | OFF }

주의

SET IMPLICIT_TRANSACTIONS 옵션을 ON으로 설정하면 연결이 암시적 트랜잭션 모드로 설정됩니다. OFF로 설정하면 연결이 다시 자동 커밋 트랜잭션 모드로 돌아갑니다.

연결이 암시적 트랜잭션 모드에 있고 현재 트랜잭션에는 없을 경우, 다음 문 중 하나를 실행하면 트랜잭션이 시작됩니다.

ALTER TABLE

FETCH

REVOKE

CREATE

GRANT

SELECT

DELETE

INSERT

TRUNCATE TABLE

DROP

OPEN

UPDATE

연결이 이미 열려 있는 트랜잭션에 있을 경우에는 문을 실행해도 새 트랜잭션이 시작되지 않습니다.

이 옵션을 ON으로 설정한 결과 자동으로 열린 트랜잭션은 트랜잭션 끝에서 사용자가 명시적으로 커밋하거나 롤백해야 합니다. 그렇지 않으면 사용자가 연결을 끊을 때 트랜잭션과 트랜잭션에 포함된 모든 데이터의 변경 내용이 롤백됩니다. 트랜잭션이 커밋된 후 위의 문 중 하나를 실행하면 새 트랜잭션이 시작됩니다.

연결을 자동 커밋 모드로 되돌리는 SET IMPLICIT_TRANSACTIONS OFF 문을 실행할 때까지는 연결이 계속 암시적 트랜잭션 모드에 있습니다. 자동 커밋 모드에서는 성공적으로 완료된 경우 모든 개별 문이 커밋됩니다.

SQL Server 의 SQL 네이트브 클라이언트 OLE DB 공급자와 SQL 네이티브 클라이언트 ODBC 드라이버는 둘 다 연결될 때 IMPLICIT_TRANSACTIONS 옵션을 OFF로 자동으로 설정합니다. SET IMPLICIT_TRANSACTIONS는 SQLClient 관리 공급자와 연결하는 경우와 HTTP 끝점을 통해 SQAP 요청을 받는 경우에는 OFF로 기본 설정됩니다.

SET ANSI_DEFAULTS 옵션이 ON이면 SET IMPLICIT_TRANSACTIONS 옵션이 ON입니다.

SET IMPLICIT_TRANSACTIONS 옵션은 실행 시간 또는 런타임에 설정되며, 구문 분석 시에는 설정되지 않습니다.

다음 예에서는 명시적으로 시작된 트랜잭션 및 IIMPLICIT_TRANSACTIONSON으로 설정되어 암시적으로 시작된 트랜잭션을 보여 줍니다. 이 예에서는 열려 있는 트랜잭션과 닫혀 있는 트랜잭션을 보여 주기 위해 @@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

참고 항목

참조

ALTER TABLE(Transact-SQL)
BEGIN TRANSACTION(Transact-SQL)
CREATE TABLE(Transact-SQL)
DELETE(Transact-SQL)
DROP TABLE(Transact-SQL)
FETCH(Transact-SQL)
GRANT(Transact-SQL)
INSERT(Transact-SQL)
OPEN(Transact-SQL)
REVOKE(Transact-SQL)
SELECT(Transact-SQL)
SET(Transact-SQL)
SET ANSI_DEFAULTS(Transact-SQL)
@@TRANCOUNT(Transact-SQL)
TRUNCATE TABLE(Transact-SQL)
UPDATE(Transact-SQL)

관련 자료

암시적 트랜잭션

도움말 및 정보

SQL Server 2005 지원 받기