2010-09-23 45 views
2

我有一個名爲[Test]的表,它具有單列[Id] int。只讀已提交的數據

我打開一個事務,向表中插入一行而不提交它。

begin tran 
insert into [Test]([Id]) values(1) 

在另一個請求中,我想從表[Test]中選擇數據。 如何才能立即讀取已提交的數據?

Readcommited表提示持有鎖。

select * from test with(readcommitted) 

謝謝。

回答

3
select * from test with(readpast) 

只要具有未提交的數據的事務只有行鎖定,它就會工作。否則,請查看兩個快照隔離備選方案(假設您至少在SQL Server 2005+上)。

1

我認爲你正在尋找的事務隔離級別設置:http://msdn.microsoft.com/en-us/library/aa259216(SQL.80).aspx

使用隔離級別SERIALIZABLE確保您無法讀取未提交的數據,但同時降低你的服務器的性能。

+0

'READ COMMITTED'將確保它們只能讀取已提交的數據! OP詢問他們如何做到這一點,而不會阻止等待數據提交。 – 2010-09-23 12:34:11