【发布时间】:2009-12-23 02:08:28
【问题描述】:
如果我想选择表中尚未处理的所有记录,然后更新这些记录以反映它们已被处理,我会执行以下操作:
SELECT * FROM [dbo].[MyTable] WHERE [flag] IS NULL;
UPDATE [dbo].[MyTable] SET [flag] = 1 WHERE [flag] IS NULL;
如何确保 UPDATE 仅适用于我刚刚选择的记录,即,防止在我的 SELECT 之后但在我的 UPDATE 之前由另一个进程添加的任何可能已添加 [flag] = NULL 的记录的 UPDATE ?我可以将这两个语句包装在一个事务中吗?我必须在桌子上放一把锁吗?
【问题讨论】:
标签: sql sql-server tsql transactions locking