为什么排不被阻止?

时间:2014-06-20 16:27:06

标签: sql-server transactions block hint

我在SQL Server Managemnet studio 2012中使用此事务

begin transaction
Select *
from tabl1 with(xlock, rowlock)
where ID = 1153;

select * from Table2;
rollback

我在第二个查询中放了一个断点。第一个查询将阻止Pieza的行ID为1153,而事务不是提交或回滚,所以当代码在breakpint中停止时,在SQL Server Management Studio的另一个实例中我做:

select * from Table1

这个查询我认为直到第一个SQL Server管理工作室的事务完成才会完成,但是las查询可以完成而没有问题。

但是,如果我在使用EF的事务中的T-SQL中执行此操作,则会阻止该行。

我也试过了:

开始交易     选择 *     来自tabl1(xlock,rowlock)     其中ID = 1153;     走     从表2中选择*;     回滚

但这并没有解决问题。

如何在管理工作室中尝试SQL Server的提示?

感谢。

编辑:

此事务阻止行:

开始交易     选择 *     来自tabl1 with(xlock,rowlock);

select * from Table2;
rollback

因此,当我设置类似ID的条件时,行不会被阻止。

1 个答案:

答案 0 :(得分:1)

来自:http://msdn.microsoft.com/en-us/library/ms187373.aspx

Lock hints ROWLOCK, UPDLOCK, AND XLOCK that acquire row-level locks may place locks on      
index keys rather than the actual data rows. For example, if a table has a nonclustered index,     
and a SELECT statement using a lock hint is handled by a covering index, a lock is acquired on    
the index key in the covering index rather than on the data row in the base table.

所以可能是索引满足第一个查询,但第二个(SELECT *)只能由clusterd索引满足。