【问题标题】:SQL Server. How to apply an exclusive lock on a table while an insert is being made?SQL 服务器。插入时如何在表上应用排他锁?
【发布时间】:2016-06-13 08:59:03
【问题描述】:

如何在插入时对表应用排他锁?在我的情况下,两个不同的线程将值插入到同一个表中,他们看不到其他事务的数据被插入。

我希望当一个事务插入行时,另一个事务等待直到第一个事务完成插入值。

SQL 触发器片段:-

BEGIN
    insert into A(SETID,ACCTID,UPDATEDTM)
    select @setid, l.acctid, getdate() 
    from AccountTable l where --(conditions for where clause)

我想锁定表 A 以完成插入操作。

【问题讨论】:

  • 看看TABLOCK或TABLOCKX
  • @RichBenner 你能提供它的语法吗?我尝试通过谷歌搜索,但没有得到任何成果。
  • 我已将代码放入下面的答案中,tablockx 被归类为表格提示。我也添加了进一步阅读。

标签: sql sql-server


【解决方案1】:

试一试 TABLOCKX,这将为您提供数据的排他锁;

BEGIN
INSERT INTO A WITH (TABLOCKX) (SETID,ACCTID,UPDATEDTM) 
SELECT @setid, l.acctid, getdate() 
FROM AccountTable l WHERE (conditions for where clause)

进一步阅读;

https://msdn.microsoft.com/en-GB/library/ms187373.aspx

TABLOCK vs TABLOCKX

【讨论】:

  • 表提示在表名之后,而不是列规范。
  • @RichBenner 感谢您的帮助。这让我很开心,因为我在 5 天后就遇到了一个问题。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
相关资源
最近更新 更多