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