(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 也沒用了
就會被後面的蓋掉
這 絕對有可能會變雷.... 紀錄一下 當交易量大的時候
讀到髒資料
無法讀到重複資料
幽靈資料