SQL 事务 - 在提交前使用值?

Pez*_*ola 3 sql-server transaction sql-server-2014

所以我在 SQL2014 中创建了一个存储过程。开始时它有:开始交易

然后它插入一个表,它有一个自动递增的主键:插入到 tNotice。

然后在存储过程中,我需要针对 tNotice 表编写一个查询,以用于将另一个插入语句构建到不同的表中。我的问题是,是否会选择新插入的值,因为这将在事务中进行,并且直到存储过程结束才会提交?

kev*_*hat 5

你可以做一个快速测试来确认这一点,我只是出于好奇进行了一个测试,这是在 sql server 2012 上。当前会话将可以看到以前插入但未提交的记录,但是其他会话将不可见取决于他们的事务隔离级别。

例子

create table hs_test(
id int
)

begin transaction

insert into hs_test values (1)

select * from hs_test

--commit
Run Code Online (Sandbox Code Playgroud)

我在一个 ssms 窗口中运行它,默认隔离级别为 ReadCommitted。不提交,选择仍然会看到插入的 1 的值。

现在,如果您打开另一个 ssms 窗口,并尝试查询该表,您将看不到任何记录,因为它尚未提交。