我正在尝试在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,查询挂起。
我做错了什么?
从文档:
由于此设置为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
总之,你有一个开放的交易,你需要做的事情。