SQL Server:在事务期间更新的表中的SELECT

时间:2017-07-28 19:38:09

标签: sql-server transactional

我有一个包含以下逻辑的存储过程:

  1. 使用BEGIN TRANS A

  2. 启动交易范围
  3. 调用第二个存储过程,其中Table1中的记录已更新

  4. 控件返回原始存储过程,其中SELECT针对Table1运行

  5. 使用COMMIT TRANS A

  6. 提交交易

    出于某种原因,步骤3中的SELECT始终在更新表之前返回数据值。我需要我的SELECT返回步骤2中尚未提交的更新值。

    如何从Table1中选择脏/未提交的数据?

1 个答案:

答案 0 :(得分:4)

所描述的场景对我来说听起来有点不对劲。您可以开始一个事务,然后执行一个过程。受该程序影响的数据是交易的一部分。这是无痛的测试和演示。

create table TransactionDemo
(
    SomeValue varchar(50)
)
insert TransactionDemo
select 'This is the original data.'

GO

create procedure TransactionDemoUpdate as
    set nocount on;
    update TransactionDemo
    set SomeValue = 'This is updated data.'

GO

begin transaction

select * from TransactionDemo --data prior to calling procedure

exec TransactionDemoUpdate --will update the data

select * from TransactionDemo --see the values have changed

rollback transaction

select * from TransactionDemo --after the rollback they are the original values again.