SET IMPLICIT_TRANSACTIONS (Transact-SQL)
設定連接的隱含交易模式。
語法
SET IMPLICIT_TRANSACTIONS { ON | OFF }
備註
當設為 ON 時,SET IMPLICIT_TRANSACTIONS 會將連接設為隱含的交易模式。當設為 OFF 時,它會使連接返回自動認可交易模式。
當連接為隱含的交易模式,且目前不在交易中時,執行下列任何一個陳述式會啟動一項交易:
ALTER TABLE |
FETCH |
REVOKE |
CREATE |
GRANT |
SELECT |
DELETE |
INSERT |
TRUNCATE TABLE |
DROP |
OPEN |
UPDATE |
如果連接已在開啟的交易中,這些陳述式不會啟動新的交易。
設定為 ON 會自動開啟交易,使用者必須在交易結束時,明確地加以認可或回復。否則,當使用者中斷連接時,會回復交易和它所包含的所有資料變更。在認可交易之後,執行上述任何一個陳述式,都會啟動一項新的交易。
隱含的交易模式會持續有效,直到連接執行 SET IMPLICIT_TRANSACTIONS OFF 陳述式為止,這個陳述式會使連接返回自動認可模式。在自動認可模式中,如果所有個別陳述式都已順利完成,則全部都會受到認可。
SQL Server 的 SQL Native Client OLE DB 提供者和 SQL Native Client ODBC 驅動程式會在連接之時,將 IMPLICIT_TRANSACTIONS 自動設為 OFF。與 SQLClient 所管理之提供者的連接,以及利用 HTTP 端點來接收的 SOAP 要求,其 SET IMPLICIT_TRANSACTIONS 預設值是 OFF。
當 SET ANSI_DEFAULTS 是 ON 時,SET IMPLICIT_TRANSACTIONS 便是 ON。
SET IMPLICIT_TRANSACTIONS 的設定是在執行階段進行設定,而不是在剖析階段進行設定。
範例
下列範例會示範將 IMPLICIT_TRANSACTIONS
設為 ON
來明確和隱含啟動的交易。它利用 @@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)