为什么 SELECT 在 SQL 服务器中创建未提交的事务?
Why is SELECT creating an uncommitted transaction in SQL Server?
我在 SSMS 中禁用了自动提交。
我今天一直在玩弄它,在经历了一些奇怪的(无论如何对我来说)行为后,我将用例缩小到以下范围:
- 连接到数据库
- 打开一个新的查询(ctrl n)
发出一个简单的SELECT语句例如
select 前 (5) * 来自 AdventureWorks2017.Person.Person
关闭 window
我在对话框(对话,嗯)框中收到以下消息:
There are uncommitted transactions. Do you wish to commit these transactions before closing the window?
作为 Oracle 的长期用户,我知道 Oracle 和 SS 之间在锁定方面存在差异,但是 select
是否会导致需要提交或回滚的未完成事务?真的吗?这当然不可能。没有数据发生变化。请问有人能解释一下吗?提前致谢。
当您使用控制台时,它会自动将您的查询放入事务中。因为您没有关闭它在您开始 运行 任何类型的查询时自动启动的事务,所以您仍然有一个打开的事务。
这篇 MSDN 文章对此进行了一些讨论。
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-implicit-transactions-transact-sql
我在 SSMS 中禁用了自动提交。 我今天一直在玩弄它,在经历了一些奇怪的(无论如何对我来说)行为后,我将用例缩小到以下范围:
- 连接到数据库
- 打开一个新的查询(ctrl n)
发出一个简单的SELECT语句例如
select 前 (5) * 来自 AdventureWorks2017.Person.Person
关闭 window
我在对话框(对话,嗯)框中收到以下消息:
There are uncommitted transactions. Do you wish to commit these transactions before closing the window?
作为 Oracle 的长期用户,我知道 Oracle 和 SS 之间在锁定方面存在差异,但是 select
是否会导致需要提交或回滚的未完成事务?真的吗?这当然不可能。没有数据发生变化。请问有人能解释一下吗?提前致谢。
当您使用控制台时,它会自动将您的查询放入事务中。因为您没有关闭它在您开始 运行 任何类型的查询时自动启动的事务,所以您仍然有一个打开的事务。
这篇 MSDN 文章对此进行了一些讨论。 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-implicit-transactions-transact-sql