我在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的条件时,行不会被阻止。
答案 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索引满足。