【问题标题】:How to set a global exclusive lock on whole table in SQL Server? [duplicate]如何在 SQL Server 中对整个表设置全局排他锁? [复制]
【发布时间】:2021-08-07 16:19:31
【问题描述】:

我需要知道如何在特定表上设置全局排他锁,以便它可以作为 C# 中的 lock 语句工作。它应该从表中显式设置和取消设置。

【问题讨论】:

  • 你做了哪些研究?您发现哪些不能完全满足您的需求?
  • 我研究了事务的锁定模式、锁定提示,但它们不适合。我需要一个临时锁来生成一个唯一的会话密钥 - 首先它会检查现有的,如果 true 将重新生成一个随机会话密钥,然后插入,并释放锁定
  • 这是一个很常见的问题,已经解决了很多次了。但我认为你搜索了错误的术语,你想搜索“SQL手动生成唯一序列号”或类似的,你会找到现有的解决方案。
  • 谢谢。以前没用过SEQUENCE,现在试试
  • 找到那个解决方案比我想象的要难。首先,您应该将评论中的说明添加到问题中。那么我标记的副本应该能够适应你的情况,假设你不能添加一个序列。

标签: sql sql-server ado.net


【解决方案1】:

您可以在事务中 ALTER 表以获取表上的排他模式锁 (Sch-M)。其他会话将无法读取或修改该表。

或者您可以使用sp_getapplock 来获取指定应用程序锁的排他锁。这就像一个命名的互斥锁。

【讨论】:

  • 可以在SQL事务中实现吗?
  • 我不明白你在问什么。排他锁通常会保留到事务结束。
猜你喜欢
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多