當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不會這樣做,它完全跳過髒記錄。我不認爲有任何方法。 –