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總是在隔離塊中執行存儲過程,所以數據更改不會影響執行中的數據集。有人可以幫助解釋存儲過程中的實際過程,檢查這個存儲過程並告知它是否正確,或者它應該放在事務塊中?以及在交易中做到這一點的任何性能或鎖定問題?感謝您的輸入。