如何解决在不锁定表的情况下读取批量记录和更新单个记录的最佳方法
Declare @maxRowId int
Set @maxRowId=0
Declare @rowIndex int
Set @rowIndex=1
Declare @recordId bigint
Set @recordId=0
Begin Try
Declare @ReservedTickets table(RowId int,Id bigint,TicketCodeId nvarchar(100),Status nvarchar(100),DateTimeReserved datetime)
insert into @ReservedTickets
select ROW_NUMBER() OVER (ORDER BY Id) RowId,Id,TicketCodeId,Status,DateTimeReserved
from [dbo].[Ticket] with(nolock)
where status='reserved' and
datetimeReserved <= DATEADD(minute,-30,getdate())
select @maxRowId=max(RowId) from @ReservedTickets
while @rowIndex<=@maxRowId
BEGIN
Select @recordId=Id from @ReservedTickets where Rowid=@rowIndex
Begin TRAN
UPDATE upd_Ticket
set
upd_Ticket.Status='available',upd_Ticket.DateTimeReserved=null,RequestReference=null
from [dbo].[Ticket] upd_Ticket
INNER JOIN [dbo].[Ticket] slct_Ticket with(nolock)
ON upd_Ticket.Id = slct_Ticket.Id
where slct_Ticket.Id= @recordId and
slct_Ticket.status='reserved' and
slct_Ticket.datetimeReserved <= DATEADD(minute,getdate())
Commit TRAN
set @rowIndex=@rowIndex+1
END
select RV.Id,RV.status 'InitialStatus',V.status 'UpdatedStatus',RV.DateTimeReserved
from @ReservedTickets RV
Left join [dbo].[Ticket] V on
RV.Id=v.Id
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。