我有一个包含以下逻辑的存储过程:
使用BEGIN TRANS A
调用第二个存储过程,其中Table1
中的记录已更新
控件返回原始存储过程,其中SELECT
针对Table1
运行
使用COMMIT TRANS A
出于某种原因,步骤3中的SELECT
始终在更新表之前返回数据值。我需要我的SELECT
返回步骤2中尚未提交的更新值。
如何从Table1
中选择脏/未提交的数据?
答案 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.