为什么 SELECT 在 SQL 服务器中创建未提交的事务?

Why is SELECT creating an uncommitted transaction in SQL Server?

我在 SSMS 中禁用了自动提交。 我今天一直在玩弄它,在经历了一些奇怪的(无论如何对我来说)行为后,我将用例缩小到以下范围:

我在对话框(对话,嗯)框中收到以下消息:

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