【问题标题】:How can perform conditional locking on insert/select Sql server?如何在插入/选择 Sql 服务器上执行条件锁定?
【发布时间】:2015-04-28 16:26:04
【问题描述】:

Meta_Cache[Value] NVARCHAR(MAX)[UserID] NVARCHAR

我有一个为每个用户插入 5 行的存储过程。

每个用户可以有多个并发调用,来自特定UserID 的第一个调用插入一组值,其他调用只读取该UserID 的值。这通过检查不起作用

if exists(Select 1 from Meta_cache Where UserID = @UserID)

当有多个并发调用时。

我想要特定的锁定机制,有条件地锁定特定 UserID 的行,另一个用户不会受到锁定的影响。

我只是参考了一些来自

的脚本

http://weblogs.sqlteam.com/dang/archive/2007/10/28/Conditional-INSERTUPDATE-Race-Condition.aspx

【问题讨论】:

    标签: sql sql-server sql-server-2008 concurrency locking


    【解决方案1】:

    行锁总是会导致页锁和表锁

    UPDATE
    Employee WITH (ROWLOCK)
    SET FullName='John Does'
    WHERE Department = 'IT'
    

    http://www.techrepublic.com/article/control-sql-server-locking-with-hints/

    您始终可以通过将查询封装在 SQL 事务中来避免竞争条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2018-08-25
      相关资源
      最近更新 更多