嵌套 select 的更新在 Sybase 中可以被认为是原子的吗?

Can an updated with nested select be considered atomic in Sybase?

我正在尝试这样的事情:

set rowcount 10 //fetch only 10 row
Update tableX set x=@BatchId where id in (select id from tableX where x=0)

基本上通过提供 batchId 将 10 条记录标记为已预订。 所以我的问题是,如果这个过程是并行执行的,那么我能否保证 select 的更新将是原子的,并且没有调用 select 来自 tableX 的类似 setof 记录用于预订?

谢谢

为保证不发生此类重叠,您应该: (i) 在语句周围放置 BEGIN TRANSACTION - COMMIT (ii) 将 HOLDLOCK 关键字直接放在 'tableX' 后面(或 运行 隔离级别 3 的整个语句)。