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

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

A transaction with two save points

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>


The savepoint has meaning only inside a nested transaction.

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