2015-09-12 141 views
0

需要對以下查詢進行說明。 在提交外部事務T時,該行已被嵌套事務刪除。但仍然選擇並顯示ID 2的值。SQL嵌套事務

BEGIN TRAN T 
SELECT * from tbl_types where ID=2 

    BEGIN TRAN nested 
     DELETE from tbl_types where ID=2 
    COMMIT TRAN nested 

COMMIT TRAN T 
+0

參見[執行計劃](http://sqlfiddle.com/ #!6/79e37/9/0),這是正常的順序 – lad2025

+0

這是關於「髒讀」。考慮閱讀http://stackoverflow.com/questions/20840/sql-server-dirty-reads-pros-cons –

回答

0

結果從第一選擇設置已發送回客戶端

自從發生了什麼並不重要; 下一個查詢將發現自從刪除的記錄沒有匹配。

這只是與語句排序有關。下面,沒有任何嵌套/明確的交易,會產生相同的結果:

SELECT * from tbl_types where ID=2 
DELETE from tbl_types where ID=2 

雖然這將不返回任何結果:

DELETE from tbl_types where ID=2 
SELECT * from tbl_types where ID=2