0
我有一个存储过程(简化版本),如下所示。通常它会将未决项目推送到电子邮件队列并将这些项目的状态更新为推送。此存储过程已在60秒内调用。SQL Server中的存储过程中的语句执行
ALTER PROCEDURE [dbo].[CreateEmailQueue]
AS
BEGIN
insert into EmailQueue
select *
from actionstatus
where actionstatus='Pending'
update actionstatus
set actionstatus = 'Pushed'
where actionstatus = 'Pending'
END
它工作正常,但我发现一个例外记录。异常的操作状态已更改为“推送”,但该记录未出现在EmailQueue中。我怀疑动作状态记录是在插入之后但在更新之前生成的。但我并不是100%确定的,因为我认为SQL Server总是在隔离块中执行存储过程,所以数据更改不会影响执行中的数据集。有人可以帮助解释存储过程中的实际过程,检查这个存储过程并告知它是否正确,或者它应该放在事务块中?以及在交易中做到这一点的任何性能或锁定问题?感谢您的输入。