gpt4 book ai didi

SQL Server 在存储过程期间锁定表

转载 作者:行者123 更新时间:2023-12-02 12:16:16 25 4
gpt4 key购买 nike

我有一个表,99% 的情况下都需要自动分配 ID(另外 1% 的情况似乎排除使用标识列)。所以我有一个存储过程来获取下一个 ID,如下所示:

select @nextid = lastid+1 from last_auto_id
check next available id in the table...
update last_auto_id set lastid = @nextid

检查必须检查用户是否手动使用过 ID,并找到下一个未使用的 ID。

当我串行调用它时,它工作正常,返回 1, 2, 3 ... 我需要做的是在多个进程同时调用它的地方提供一些锁定。理想情况下,我只需要它独占锁定此代码周围的last_auto_id表,以便第二个调用必须等待第一个调用更新表才能运行它的选择。

在 Postgres 中,我可以执行“LOCK TABLE last_auto_id;”之类的操作显式锁定表。有什么想法如何在 SQL Server 中实现它吗?

提前致谢!

最佳答案

以下更新会将您的 Lastid 加一,并在单个事务中将该值分配给您的本地变量。

编辑

感谢 Dave 和 Mitch 指出原始解决方案的隔离级别问题。

UPDATE  last_auto_id WITH (READCOMMITTEDLOCK)
SET @nextid = lastid = lastid + 1

关于SQL Server 在存储过程期间锁定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4143558/

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