当SQL Server已经锁定更新时,SQL Server是否可以使用NoWait读取已提交的数据?在没有等待SQL Server的情况下读取已提交的数据
我创建了一个名为 “TBL”
CREATE TABLE [dbo].[Tbl](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Detail] [varchar](50) NULL)
插入几行表。
insert into Tbl(Detail) values ('1D')
insert into Tbl(Detail) values ('2D')
insert into Tbl(Detail) values ('3D')
insert into Tbl(Detail) values ('4D')
现在,我已经在SSMS中将隐式事务设置为true。 (工具 - >选项 - > SQL服务器 - > ANSI
然后,在一个会话(打开新的查询窗口)执行更新语句,它应该把一个排它锁在该行
UPDATE dbo.tbl SET Detail = '9D' where Id = 1
现在,在另一个会议上,我想选择提交的行。如果我执行,
SELECT * FROM dbo.tbl with(READCOMMITTED,NOWAIT)
,它抛出异常(锁定请求超时时间连续超过)
它可能试图在那里已经应用的另一个会话行申请共享锁EXC可笑的锁。因此得到例外。
现在,这是一个常见的情况,其中一个事务需要很长时间来更新巨大的行。我应该可以在另一个会话中看到提交的数据而无需等待。
需要什么类型的HINT才能在SQL Server中实现这一点?
投票迁移到DBA.StackExchange – swasheck
我想你想['READPAST'(http://msdn.microsoft.com/en-us/library/ms187373.aspx) –
@TI READPAST不会这样做,它完全跳过脏记录。我不认为有任何方法。 –