A transaction with two save points : Save points « Transaction « SQL Server / T-SQL Tutorial






5>
6>
7> create table Bankers(
8>    BankerID             Integer,
9>    BankerName           VARCHAR(20),
10>    BankerContactLName   VARCHAR(20),
11>    BankerContactFName   VARCHAR(20),
12>    BankerCity           VARCHAR(20),
13>    BankerState          VARCHAR(20),
14>    BankerZipCode        VARCHAR(20),
15>    BankerPhone          VARCHAR(20)
16> )
17> GO
1>
2> insert into Bankers values (1, 'ABC Inc.','Joe','Smith','Vancouver','BC','11111','111-111-1111');
3> GO

(1 rows affected)
1> insert into Bankers values (2, 'DEF Inc.','Red','Rice', 'New York', 'DE','22222','222-222-2222');
2> GO

(1 rows affected)
1> insert into Bankers values (3, 'HJI Inc.','Kit','Cat',  'Paris',    'CA','33333','333-333-3333');
2> GO

(1 rows affected)
1> insert into Bankers values (4, 'QWE Inc.','Git','Black','Regina',   'ER','44444','444-444-4444');
2> GO

(1 rows affected)
1> insert into Bankers values (5, 'RTY Inc.','Wil','Lee',  'Toronto',  'YU','55555','555-555-5555');
2> GO

(1 rows affected)
1> insert into Bankers values (6, 'YUI Inc.','Ted','Larry','Calgary',  'TY','66666','666-666-6666');
2> GO

(1 rows affected)
1> insert into Bankers values (7, 'OIP Inc.','Yam','Act',  'San Franc','FG','77777','777-777-7777');
2> GO

(1 rows affected)
1> insert into Bankers values (8, 'SAD Inc.','Hit','Eat',  'Orland',   'PO','88888','888-888-8888');
2> GO

(1 rows affected)
1> insert into Bankers values (9, 'DFG Inc.','Sad','Lee',  'Wisler',   'PL','99999','999-999-9999');
2> GO

(1 rows affected)
1> insert into Bankers values (0, 'GHJ Inc.','Bit','Lee',  'Ticker',   'MN','00000','000-000-0000');
2> GO

(1 rows affected)
1>
2>
3>
4> SELECT BankerID, BankerName
5> INTO #BankerCopy
6> FROM Bankers
7> WHERE BankerID < 5
8> BEGIN TRAN
9>   DELETE #BankerCopy WHERE BankerID = 1
10>   SAVE TRAN Banker1
11>     DELETE #BankerCopy WHERE BankerID = 2
12>     SAVE TRAN Banker2
13>       DELETE #BankerCopy WHERE BankerID = 3
14>       SELECT * FROM #BankerCopy
15>     ROLLBACK TRAN Banker2
16>     SELECT * FROM #BankerCopy
17>   ROLLBACK TRAN Banker1
18>   SELECT * FROM #BankerCopy
19> COMMIT TRAN
20> GO

(5 rows affected)

(1 rows affected)

(1 rows affected)

(1 rows affected)
BankerID    BankerName
----------- --------------------
          4 QWE Inc.
          0 GHJ Inc.

(2 rows affected)
BankerID    BankerName
----------- --------------------
          3 HJI Inc.
          4 QWE Inc.
          0 GHJ Inc.

(3 rows affected)
BankerID    BankerName
----------- --------------------
          2 DEF Inc.
          3 HJI Inc.
          4 QWE Inc.
          0 GHJ Inc.

(4 rows affected)
1> SELECT * FROM #BankerCopy
2> GO
BankerID    BankerName
----------- --------------------
          2 DEF Inc.
          3 HJI Inc.
          4 QWE Inc.
          0 GHJ Inc.

(4 rows affected)
1>
2> drop table #BankerCopy;
3> GO
1>
2>
3> drop table Bankers;
4> GO
1>
2>








23.4.Save points
23.4.1.The savepoint has meaning only inside a nested transaction.
23.4.2.A transaction with two save points