Допустим, у меня есть транзакция SQL с тремя точками сохранения, как показано ниже:
BEGIN TRANSACTION
--Insert Value 1
SAVE TRANSACTION FirstInsert -- 1st Save Point
--Insert Value 2
SAVE TRANSACTION SecondInsert -- 2nd Save Point
--Insert Value 3
SAVE TRANSACTION ThirdInsert -- 3rd Save Point
--Insert Value 4
ROLLBACK TRANSACTION SecondInsert
COMMIT
Если я откатаю точку сохранения "SecondInsert", 4-е значение вставки также получит откат.Есть ли способ откатить только точку сохранения SecondInsert?так что четвертое вставленное значение останется в таблице.
CREATE TABLE TestTable
(
ID INT NOT NULL,
Value INT NOT NULL,
PRIMARY KEY (ID)
)
GO
TRUNCATE TABLE TestTable;
DECLARE @vSecondInsert NCHAR(50)='SecondInsert'
BEGIN TRANSACTION
INSERT INTO TestTable( ID, Value ) VALUES ( 1, N'10')
-- this will create a savepoint after the first INSERT
SAVE TRANSACTION FirstInsert
INSERT INTO TestTable( ID, Value ) VALUES ( 2, N'20')
-- this will create a savepoint after the second INSERT
SAVE TRANSACTION @vSecondInsert
INSERT INTO TestTable( ID, Value ) VALUES ( 3, N'30')
SAVE TRANSACTION ThirdInsert
INSERT INTO TestTable( ID, Value ) VALUES ( 4, N'40')
ROLLBACK TRANSACTION @vSecondInsert
COMMIT
SELECT * FROM TestTable