【发布时间】:2021-10-13 17:08:40
【问题描述】:
假设我的表中有 10 条记录。
- ID 名称
- 1 abc
- 2 定义
- 3 吉
- 10 xyz
现在将有多个并发请求对该 SQL 表的多个请求,并从该表中选择前 1 条记录。
- 当 First request 带有 Select TOP 1 记录时,应返回并锁定第一条记录以供其他人更新
- 当第二个请求带有select TOP 1记录时,下一条记录应该被锁定并返回
- 当第三个请求带有select TOP 1记录时,第3条记录应该被锁定并返回
- 当第10个请求带有select TOP 1记录时,第10个记录应该被锁定并返回
有没有办法进行这种操作?
【问题讨论】:
-
请求来自哪里?期待这样的答案:“10 个打开网页的用户运行一个 Angular 应用程序,该应用程序调用后端 C# Web 服务,该服务使用数据库”
-
对我来说它看起来像队列实现。据我记得在 SQL Server 中,您可以使用提示 READPAST 来实现这一点
-
照你说的做?锁表,拉第一条记录,设置为进行中,解锁表?
-
感谢分享输入。我同时有一个 Web 应用程序和不同的用户或不同的浏览器会话请求号。我已经预先填充了 SQL 表中的数字。现在我的应用程序层应该从这个 SQL 表中获取唯一编号,而无需锁定整个表。如果我锁定表,它会起作用,但它会是连续的并影响性能。 10 只是我提到的示例,但实际上可能有数千个。类似于rusanu.com/2010/03/26/using-tables-as-queuesthis
-
SQL Server 2005 多年来一直不受支持 。如果您真的在使用该数据库,请升级!如果没有,请修复标签。
标签: sql sql-server tsql sql-server-2016