我正在尝试这样的事情:
set rowcount 10 //fetch only 10 row
Update tableX set x=@BatchId where id in (select id from tableX where x=0)
通过提供batchId基本上标记了10条记录。 所以我的问题是如果这个proc是并行执行的,那么我可以保证select的更新是原子的,没有调用会从tableX中选择类似的setof记录进行预订吗?
由于
答案 0 :(得分:1)
为了保证不会发生这样的重叠,你应该: (i)在声明中加入BEGIN TRANSACTION - COMMIT (ii)将HOLDLOCK关键字直接放在'tableX'后面(或在隔离级别3运行整个语句)。