Ams*_*taf 5 sql-server locking serializable
这是关于如何在表中不存在时锁定值范围(以及其他任何内容!)的一般问题.问题的触发器是我想要"插入如果不存在",我不想使用MERGE因为我需要支持SQL Server 2005.
在第一次连接中我:
begin transaction(SERIALIZABLE, ROWLOCK)+ where子句从表中选择数据以重新指定范围在第二个连接中,我将数据插入到表中,其值与第一个连接中的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)
请注意,在第一个窗口中的事务结束之前,第二个查询不会结束