小编Ams*_*taf的帖子

Sql Server忽略rowlock提示

这是关于如何在表中不存在时锁定值范围(以及其他任何内容!)的一般问题.问题的触发器是我想要"插入如果不存在",我不想使用MERGE因为我需要支持SQL Server 2005.

在第一次连接中我:

  1. begin transaction
  2. 使用(SERIALIZABLE, ROWLOCK)+ where子句从表中选择数据以重新指定范围
  3. 等待...

在第二个连接中,我将数据插入到表中,其值与第一个连接中的where子句匹配

我希望第二个连接不会受到第一个连接的影响,但只有在我提交(或回滚)第一个连接的事务后才会完成.

我错过了什么?

这是我的测试代码:

首先创建此表:

CREATE TABLE test
(
    VALUE nvarchar(100)
)
Run Code Online (Sandbox Code Playgroud)

二,打开新的查询窗口sql server managements studio并执行以下命令:

BEGIN TRANSACTION;
SELECT *
FROM  test WITH (SERIALIZABLE,ROWLOCK)
WHERE value = N'a';
Run Code Online (Sandbox Code Playgroud)

第三,打开另一个新的查询窗口并执行以下操作:

INSERT INTO test VALUES (N'b');
Run Code Online (Sandbox Code Playgroud)

请注意,在第一个窗口中的事务结束之前,第二个查询不会结束

sql-server locking serializable

5
推荐指数
1
解决办法
1546
查看次数

标签 统计

locking ×1

serializable ×1

sql-server ×1