【发布时间】:2009-11-04 18:30:29
【问题描述】:
我无法弄清楚为什么会发生这种情况。很确定我理解这个理论,但肯定有其他我看不到的事情发生。
表 A 具有以下架构:
ID [Primary Key]
Name
Type [Foreign Key]
SprocA 将隔离级别设置为可重复读取,并从表 A 中选择具有Type=1 的行。它还会更新这些行。
SprocB 从表 A 中选择具有Type=2 的行。
现在鉴于这些是完全不同的行集,如果我同时执行这两个行(并调用 WAITFOR 以减慢它的速度),SprocB 直到 SprocA 才会完成。
我知道这与对 Type 的查询有关,就好像我根据 Primary ID 进行选择一样,它允许并发访问表。
有人解释了吗?
干杯
【问题讨论】:
-
您确定在 SprocA 和 SprocB 执行期间没有执行任何数据库修改(即使是触发器)?
-
是的,绝对确定没有触发器。
-
执行更新需要多长时间?此外,是否涉及事务——通过 BEGIN TRANSACTION/COMMIT 或通过某些应用程序连接设置? (被 SET IMPLICIT_TRANSACTIONS 的流氓设置转移了好几天......)
标签: sql-server isolation-level