我正在尝试在SQL Server中完成一项任务。我正在共享示例问题,因为我无法共享整个任务说明。
问题:我们有一个名为Person
的表,如下所示:
Person_Id Person_Name Person_Age
--------- ----------- ----------
1 AAA 25
2 BBB 25
3 CCC 25
4 DDD 25
在该表中,我想使用将要保存在Person_Id = 4
中的TRANSACTION
。
Person_Id Person_Name Person_Age
--------- ----------- ----------
4 DDD 25
在执行上述交易时,用户希望访问(INSERT, UPDATE, DELETE
)下表中的所有其他记录(Person_Id = 4
除外):
Person_Id Person_Name Person_Age
--------- ----------- ----------
1 AAA 25
2 BBB 25
3 CCC 25
我尝试过的事情:
我尝试使用NOLOCK, ROWLOCK
,但无法实现。请帮助我实现此方案。我也尝试过此link。按照此链接,使用
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT
查询正在获取未修改的数据。例如,如果我尝试UPDATE
中的记录TRANSACTION
并且记录已更新,但是TRANSACTION
忙于执行其他语句。
Person_Id Person_Name Person_Age
--------- ----------- ----------
4 DDD 25
现在,当其他连接尝试对表中的记录进行SELECT
时,将返回所有其他记录以及记录:Person_Id = 4
(具有旧值)。
SERIALIZABLE指定以下内容:
语句无法读取已修改但尚未读取的数据 由其他交易承诺。
从上面开始,当我使用SERIALIZABLE
隔离时,它仍然返回OLDER记录Person_Id = 4
。在这种情况下,我不需要。
我想获取除TRANSACTION
中的记录以外的所有其他记录。
换句话说,如果一条记录被锁定在TRANSACTION
中,则该记录不应出现在具有不同连接的任何其他SELECT STATEMENT EXECUTION
中。