Есть ли способ откатить определенные точки сохранения в транзакции? - PullRequest
0 голосов
/ 27 сентября 2018

Допустим, у меня есть транзакция 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...