gpt4 book ai didi

SQL 从表中选择行并更新相同的行

转载 作者:太空狗 更新时间:2023-10-30 01:51:43 24 4
gpt4 key购买 nike

我想:

  1. 从表中选择 N 行进行处理,其中 flag=0
  2. 使用这 N 行中的值在第二个表上做一些工作
  3. 更新这N行并设置flag=1

我有并行进程一起做同样的工作,我想确保所有的进程都在唯一的行上工作。我如何确保这一点?

最佳答案

我假设您正在 SQL Server 上运行(因为标签),否则我的回答不适用。仅仅锁定是不够的。如果您使用数据库记录锁定,SqL 服务器将阻止其他试图访问锁定行的进程,实际上您一次只能处理一行。您的解决方案是将行锁定与 READPAST 提示相结合,以便跳过其他人锁定的行。以下是每个进程应该做的事情:

  1. 选择下一个解锁行进行处理并锁定
  2. 做作业
  3. 更新行并结束事务

select top 1 id, ... from TheTable with (updlock, readpast) where flag = 0

//do the work now

update TheTable set flag = 1 where id=<previously retrieved id>

这里的好处是,选择下一个解锁行并将其锁定的操作是原子的,因此它保证没有其他人能够选择同一行。

关于SQL 从表中选择行并更新相同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7973965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com