我有一张桌子,如下:
id status
-- ------
1 pass
1 fail
1 pass
1 na
1 na
此外,我有一个存储过程,该存储过程返回一个表,其中前100条记录的状态为“ na”。该存储过程可由环境中的多个节点调用,我不希望它们获取重复的数据。因此,我想在执行过程中锁定存储过程,并将从存储过程中获取的记录的状态设置为“进行中”,然后返回该表,然后释放该锁,以使不同的节点不会获取相同的内容数据。我该怎么办?
答案 0 :(得分:1)
您可以将select与WITH (SERIALIZABLE)
隔离级别结合使用,以确保记录被锁定,直到状态更新为止,如下所示。
SELECT TOP 100 id
INTO #temp
FROM [your_table] WITH (serializable)
WHERE status = 'na'
UPDATE ut
SET status = 'In Progress'
FROM [your_table] ut WITH (serializable)
INNER JOIN #temp T
ON T.id = ut.id
SERIALIZABLE
隔离级别指定以下内容: