SQL (TABLOCKX)

(TABLOCKX)

Declare @temp  nvarchar(max)

begin tran T1
select @temp = nvmax from test_a(TABLOCKX)  where id = 2
update test_a set nvmax=@temp+ N'Temp' where id = 2

-- select nvmax from test_a  where id = 2
--commit

首先 在SSMS上 建立兩個TRANSACTION 都不COMMIT
如果沒有TABLOCKX
跑到SELECT的時候 資料被建立放到@temp中
因此就會變成T2讀到T1 COMMIT之前的髒資料
前一個更新就算下了COMMIT 也沒用了
就會被後面的蓋掉

這 絕對有可能會變雷.... 紀錄一下 當交易量大的時候

讀到髒資料
無法讀到重複資料
幽靈資料