MS-SQL Server 表上的 Implicit_transaction

MS-SQL Server 表上的 Implicit_transaction

我正在尝试在 SQL Server 上试验 Implicit_transaction。但是,执行后:

SET IMPLICIT_TRANSACTIONS ON;

INSERT INTO [Interface].[dbo].[Log] ([String], [Time], [theUser]) VALUES ((SELECT [String] FROM [Interface].[dbo].[Log] WHERE [ID] = '128'), null, 'ROW3');

SET IMPLICIT_TRANSACTIONS OFF;

但是,当我去做 SELECT 时,查询挂起了。

我做错了什么?

答案1

来自文档:

由于此设置为 ON 而自动打开的事务必须由用户在事务结束时明确提交或回滚。否则,当用户断开连接时,事务及其包含的所有数据更改都将回滚。提交事务后,执行上述语句之一将启动一个新事务。

因此,实际上你这样做了:

begin transaction;
INSERT INTO [Interface].[dbo].[Log] ([String], [Time], [theUser]) 
VALUES ((SELECT [String] FROM [Interface].[dbo].[Log] WHERE [ID] = '128'), null, 'ROW3');
--no commit or rollback, so transaction is still open

简而言之,您有一个未结交易,需要处理一下。

相关内容