SQL提供的排它锁XLOCK,可以为我们提供事务级的排它性。即在某个事务对于表进行访问时,别的事物便无法对于表进行访问,并等待到事物完成。
这是我们不愿意看到的,我们系统这些已经被访问的数据好似消失了一般,而以后的操作将无视这些被访问的数据而执行。这就需要第二个参数READPAST ,他的作用是使得访问跳过那么些已经被其他事物锁住的数据行,而直接返回数据。
例如,假定表 T1 包含一个单精度整数列,其值为1、2、3、4 和 5。如果事务 A 将值 3 值更改为 8,但尚未提交,则 SELECT * FROM T1 (READPAST) 将生成值 1、2、4 和 5。使用 SQL Server 表实现工作队列时,READPAST 主要用于减少锁定争用。使用 READPAST 的队列读取器会跳过被其他事务锁定的队列项,跳至下一个可用的队列项,而不是等待其他事务释放锁。
那么对于一个被多个源同时访问的SQL,起就必须同时具有XLOck和readPast这样的特性,如
最后一项a为表Table上的索引,用以指定其查询时所用之索引。
select * from Table with ( xlock , readpast , index (a ))