為連接設置隱性事務模式。
SET IMPLICIT_TRANSACTIONS { ON | OFF }
當設置為 ON 時,SET IMPLICIT_TRANSACTIONS 將連接設置為隱性事務模式。當設置為 OFF 時,則使連接返回到自動提交事務模式。
當連接是隱性事務模式且當前不在事務中時,執(zhí)行下列語句將啟動事務:
| ALTER TABLE | FETCH | REVOKE |
| CREATE | GRANT | SELECT |
| DELETE | INSERT | TRUNCATE TABLE |
| DROP | OPEN | UPDATE |
如果連接已經(jīng)在打開的事務中,則上述語句不啟動新事務。
對于因為該設置為 ON 而自動打開的事務,用戶必須在該事務結(jié)束時將其顯式提交或回滾。否則當用戶斷開連接時,事務及其所包含的所有數(shù)據(jù)更改將回滾。在事務提交后,執(zhí)行上述任一語句即可啟動新事務。
隱性事務模式將保持有效,直到連接執(zhí)行 SET IMPLICIT_TRANSACTIONS OFF 語句使連接返回到自動提交模式。在自動提交模式下,如果各個語句成功完成則提交。
在進行連接時,SQL Server ODBC 驅(qū)動程序和用于 SQL Server 的 Microsoft OLE DB 提供程序自動將 IMPLICIT_TRANSACTIONS 設置為 OFF。對來自 DB-Library 應用程序的連接,SET IMPLICIT_TRANSACTIONS 默認為 OFF。
當 SET ANSI_DEFAULTS 為 ON 時,將啟用 SET IMPLICIT_TRANSACTIONS。
SET IMPLICIT_TRANSACTIONS 的設置是在執(zhí)行或運行時設置,而不是在分析時設置。
下例演示在將 IMPLICIT_TRANSACTIONS 設置為 ON 時顯式或隱式啟動事務。它使用 @@TRANCOUNT 函數(shù)演示打開的事務和關閉的事務。
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
相關文章