隐性事务是一种连接选项,该选项下连接执行的每个 SQL 语句都视为单独的
事务。
Transact-SQL 隐性事务
DB-Library 应用程序和 Transact-SQL
脚本使用 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句启动隐性事务模式。使用 SET IMPLICIT_TRANSACTIONS OFF 语句关闭隐性事务模式。使用 COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION 或 ROLLBACK WORK 语句结束每个
事务。
SET QUOTED_IDENTIFIER OFF
GO
SET NOCOUNT OFF
GO
USE pubs
GO
CREATE TABLE ImplicitTran (Cola int PRIMARY KEY,Colb char(3) NOT NULL)
GO
SET IMPLICIT_TRANSACTIONS ON
GO
/* First implicit transaction started by an INSERT statement */
INSERT INTO ImplicitTran VALUES (1, 'aaa')
GO
INSERT INTO ImplicitTran VALUES (2, 'bbb')
GO
/* Commit first transaction */
COMMIT TRANSACTION
GO
/* Second implicit transaction started by a SELECT statement */
SELECT COUNT(*) FROM ImplicitTran
GO
INSERT INTO ImplicitTran VALUES (3, 'ccc')
GO
SELECT * FROM ImplicitTran
GO
/* Commit second transaction */
COMMIT TRANSACTION
GO
SET IMPLICIT_TRANSACTIONS OFF
GO
API 隐性事务
用来设置隐性事务的 API 机制是 ODBC 和 OLE DB。
ODBC 调用 SQLSetConnectAttr 函数启动隐性事务模式,其中 Attribute 设置为 SQL_ATTR_AUTOCOMMIT,ValuePtr 设置为 SQL_AUTOCOMMIT_OFF。
在调用 SQLSetConnectAttr 之前,连接将一直保持为隐性事务模式。其中 Attribute 设置为 SQL_ATTR_AUTOCOMMIT,ValuePtr 设置为 SQL_AUTOCOMMIT_ON。
调用 SQLEndTran 函数提交或回滚每个
事务,其中 CompletionType 设置为 SQL_COMMIT 或 SQL_ROLLBACK。
当 SQL_AUTOCOMMIT_OFF 由 ODBC 应用程序设置时,Microsoft® SQL Server™ ODBC 驱动程序发出 SET IMPLICIT_TRANSACTION ON 语句。
OLE DB
OLE DB 没有专门用来设置隐性事务模式的方法。 调用 ITransactionLocal::StartTransaction 方法启动显式模式。
当调用 ITransaction::Commit 或 ITransaction::Abort 方法(其中 fRetaining 设置为 TRUE)时,OLE DB 将完成当前的
事务并进入隐性事务模式。只要将 ITransaction::Commit 或 ITransaction::Abort 中的 fRetaining 设置为 TRUE,那么连接就将保持隐性事务模式。
调用 ITransaction::Commit 或 ITransaction::Abort(其中 fRetaining 设置为 FALSE)停止隐性事务模式。
ADO 不支持隐性事务。ADO 应用程序使用自动提交模式或显式模式。