我正在尝试在 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
简而言之,您有一个未结交易,需要处理一下。