SQL Server/T-SQL Tutorial/Transaction/Save points

Материал из SQL эксперт
Перейти к: навигация, поиск

A transaction with two save points

   <source lang="sql">

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></source>


The savepoint has meaning only inside a nested transaction.

   <source lang="sql">

Syntax for the SAVE TRANSACTION Statement SAVE TRAN [ SACTION ] { savepoint_name | @savepoint_variable }</source>