更新而不锁定事务

时间:2008-11-24 13:10:51

标签: sql-server

使用单个活动连接在SQL Server中是否可以使用以下方案?

在READCOMMITED事务中,我需要更新一个表而不锁定它。例如,每次执行语句时,我都会在该表中增加一个字段。如果事务失败,则不需要回滚此操作。此外,此更新不应阻止尝试更新相同位置的其他并发用户。

2 个答案:

答案 0 :(得分:1)

如果不对表进行锁定,则无法执行更新。这是为了允许OTHER事务的事务隔离级别控制是否可以“看到”更新中所做的更改。您可以更改更新的事务隔离级别,但这只会影响更新会话(您设置它)控制更新是否可以“看到”其他会话中所做的更改...

如果您希望OTHER Sql语句能够看到您在此更新中所做的事情,就好像它没有被锁定一样,您必须将其他tx上的事务隔离级别更改为Read Uncommited。 (小心这一点......这种隔离级别可能会导致数据库出现大量不一致。)

答案 1 :(得分:1)

在写入期间,您无法锁定表格。

你的意思是你想要写一个表,但是在提交/回滚之前是否持有 的独占锁?

如果是这样,请将您需要的值放入表变量(不受回滚/提交影响)并将写入推迟到主事务之后。然后,执行单个更新以从表变量中推送值。

修改:SQL 2008 workaround,稍后提出其他想法