为连接设置隐性事务模式。
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 ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自动将 IMPLICIT_TRANSACTIONS 设置为 OFF。对来自 DB-Library 应用程序的连接,SET IMPLICIT_TRANSACTIONS 默认为 OFF。
当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET IMPLICIT_TRANSACTIONS。
SET IMPLICIT_TRANSACTIONS 的设置是在执行或运行时设置,而不是在分析时设置。
下例演示在将 IMPLICIT_TRANSACTIONS 设置为 ON 时显式或隐式启动事务。它使用 @@TRANCOUNT 函数演示打开的事务和关闭的事务。
USE pubs
GO
CREATE table t1 (a int)
GO
INSERT INTO t1 VALUES (1)
GO
PRINT 'Use explicit transaction'
BEGIN TRAN
INSERT INTO t1 VALUES (2)
SELECT 'Tran count in transaction'= @@TRANCOUNT
COMMIT TRAN
SELECT 'Tran count outside transaction'= @@TRANCOUNT
GO
PRINT 'Setting IMPLICIT_TRANSACTIONS ON'
GO
SET IMPLICIT_TRANSACTIONS ON
GO
PRINT 'Use implicit transactions'
GO
-- No BEGIN TRAN needed here.
INSERT INTO t1 VALUES (4)
SELECT 'Tran count in transaction'= @@TRANCOUNT
COMMIT TRAN
SELECT 'Tran count outside transaction'= @@TRANCOUNT
GO
PRINT 'Use explicit transactions with IMPLICIT_TRANSACTIONS ON'
GO
BEGIN TRAN
INSERT INTO t1 VALUES (5)
SELECT 'Tran count in transaction'= @@TRANCOUNT
COMMIT TRAN
SELECT 'Tran count outside transaction'= @@TRANCOUNT
GO
SELECT * FROM t1
GO
-- Need to commit this tran too!
DROP TABLE t1
COMMIT TRAN
GO
相关文章