где данные были сохранены между транс и откат ...? - PullRequest
0 голосов
/ 16 ноября 2018

На собеседовании у меня возник вопрос. Поэтому я пытаюсь воссоздать его:

Зарплата

id  Emp_id  Salary
1   1       50000
2   2       40000
3   3       30000

См. Следующий пример:

begin tran
update salary set Salary = 25000 where id = 2
select * from salary -- salary = 25000
rollback
select * from salary -- salary = 40000

Вот мой вопрос,

где хранилось старое значение зарплаты?

Примечание: я предполагаю, что Magic Table может использоваться как триггер.

когда я гуглял как «где данные были сохранены между транс и откатом», тогда я получаю результаты в виде различных типов Учебников по откату транзакций . Поэтому мне нужна рука помощи от переполнения стека.

Редактировать 1

begin tran
update salary set Salary = 25000 where id = 2
select * from salary -- salary = 25000
-- I want to see salary = 40000 at here. Where as OUTPUT clause is invalid.
rollback
select * from salary -- salary = 40000

Спасибо

TamilPugal.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Посмотрите на это ...

USE tempdb;
go

CREATE TABLE dbo.TranTest (id INT NOT NULL, some_value INT NOT NULL);
INSERT dbo.TranTest (id, some_value) VALUES (1, 11111);

BEGIN TRANSACTION
    -- check initial values...
    SELECT * FROM dbo.TranTest tt;

    -- update values and include the OUTPUT clause to view the contents of the "Inserted" & "Deleted" tables.
    UPDATE tt SET 
        tt.some_value = tt.some_value * 22
            OUTPUT 
                Deleted.id, 
                Deleted.some_value, 
                Inserted.id, 
                Inserted.some_value, 
                GETDATE() AS tran_date 
    FROM
        dbo.TranTest tt;

    -- check the values after the UPDATE and before the ROLLBACK
    SELECT * FROM dbo.TranTest tt;

ROLLBACK TRANSACTION

    -- check the values after the ROLLBACK
    SELECT * FROM dbo.TranTest tt;  

Результаты ...

id          some_value
----------- -----------
1           11111

id          some_value  id          some_value  tran_date
----------- ----------- ----------- ----------- -----------------------
1           11111       1           244442      2018-11-16 16:18:17.330

id          some_value
----------- -----------
1           244442

id          some_value
----------- -----------
1           11111
0 голосов
/ 16 ноября 2018

Это НЕ "волшебный стол".Детали транзакции хранятся в журнале транзакций до тех пор, пока транзакция не будет разблокирована (фиксация или откат).В данном случае таблицы будет недостаточно, поскольку транзакция может повлиять на любое количество таблиц.

Для большей ясности, данные все еще находятся в таблице, но помечены для удаления.Затем либо строки становятся неотмеченными, либо строки удаляются.Я не очень хорошо объясняю это, но это основная концепция того, как это работает.

...