2015-09-12 4 views
0

Нужно пояснить нижеприведенный запрос. При совершении внешней транзакции T строка уже удалена вложенной транзакцией. Но при этом выбирается и отображается значение с идентификатором 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 
Смежные вопросы