How to use Commit, Rollback and SavePoint commands in SQL Server
The Commit, Rollback and SavePoint are the Transactional Controlling Language commands in the SQL Server. They are used to mange the Transactions in the Database. In general, these commands are use to manage the changes made by the DML Commands like Insert update and Delete.
Commit : The Commit command is used to save any Transaction permanently into the database. Once you Commit any Transaction that cannot be Rollback.
The Transaction is nothing but any operation that we perform on a Table. The transaction which begin with keyword "Tran" or "Transaction" and ends with either Commit or Rollback.
Eg :
Begin Tran T1
Update Tbl_Emp Set Job_Title='Market Analyst' Where Emp_Id=123
Commit Tran T1
Rollback : Rollback command is used to undo the changes made by any operation but only before a Commit is done. We can't Rollback data which has been Committed in the database with the Commit keyword.
Eg :
Suppose we have a Table "Tbl_Emp" with records as follows..
Emp_Id Job_Title
143 Engineer
123 Market Analyst
Now lets make an update to Table and Rollback to Original state
Begin Tran T1
Update Tbl_Emp Set Job_Title="Market Research Analyst" Where Emp_Id=123
Rollback Tran T1
Ouput :
Emp_Id Job_Title
143 Engineer
123 Market Analyst
Savepoint :
Savepoint command is used to temporarily save a transaction so that you can rollback to that point whenever necessary. You can you use multiple save points in a Transaction.
Syntax : Save Transaction SavePoint_Name
Example-I :
In the following Transaction, I am Inserting 3 records into a Table then Saving the Trasaction ( SavePoint 1) and then Updating those 3 records and again Saving the Transaction( SavePoint 2).
Next I am Truncating the Table and Rollback to Save Point then Deleting a Record then Committing the Transaction.
Begin Tran T1
Truncate Table [Emp_Test]
Select * From [dbo].[Emp_Test]
Insert Into [Emp_Test] Values ( 113,'Raju')
Insert Into [Emp_Test] Values ( 114,'Ravi')
Insert Into [Emp_Test] Values ( 115,'Rani')
Save Tran SP1;
Update [Emp_Test] Set Ename='Sai' Where Eid=113
Update [Emp_Test] Set Ename='Shiva' Where Eid=114
Update [Emp_Test] Set Ename='Sloka' Where Eid=115
Save Tran SP2;
Truncate Table [Emp_Test]
Rollback Tran SP1;
Delete From [Emp_Test] Where EId =113
Commit Tran T1 ;
Select * From [dbo].[Emp_Test]
GO
Output :
EId Ename
114 Ravi
115 Rani
Notes :
Here if you observe, we inserted 3 records before SavePoint 1(Save Tran SP1).
But when you Rollback to that Savepoint , we got only 2 records, because we deleted a record after Rollback then Committed the Transaction. So, once you Committed a Transaction after any operation that cannot be rolled back.
Example-II :
Here we Rollback to SavePoint 2 ( Save Tran SP2)
Begin Tran T1
Truncate Table [Emp_Test]
Select * From [dbo].[Emp_Test]
Insert Into [Emp_Test] Values ( 113,'Raju')
Insert Into [Emp_Test] Values ( 114,'Ravi')
Insert Into [Emp_Test] Values ( 115,'Rani')
Save Tran SP1;
Update [Emp_Test] Set Ename='Sai' Where Eid=113
Update [Emp_Test] Set Ename='Shiva' Where Eid=114
Update [Emp_Test] Set Ename='Sloka' Where Eid=115
Save Tran SP2;
Truncate Table [Emp_Test]
Rollback Tran SP2;
Delete From [Emp_Test] Where EId =113
Commit Tran T1 ;
Select * From [dbo].[Emp_Test]
GO
Output :
EId Ename
114 Shiva
115 Sloka
The Commit, Rollback and SavePoint are the Transactional Controlling Language commands in the SQL Server. They are used to mange the Transactions in the Database. In general, these commands are use to manage the changes made by the DML Commands like Insert update and Delete.
Commit : The Commit command is used to save any Transaction permanently into the database. Once you Commit any Transaction that cannot be Rollback.
The Transaction is nothing but any operation that we perform on a Table. The transaction which begin with keyword "Tran" or "Transaction" and ends with either Commit or Rollback.
Eg :
Begin Tran T1
Update Tbl_Emp Set Job_Title='Market Analyst' Where Emp_Id=123
Commit Tran T1
Rollback : Rollback command is used to undo the changes made by any operation but only before a Commit is done. We can't Rollback data which has been Committed in the database with the Commit keyword.
Eg :
Suppose we have a Table "Tbl_Emp" with records as follows..
Emp_Id Job_Title
143 Engineer
123 Market Analyst
Now lets make an update to Table and Rollback to Original state
Begin Tran T1
Update Tbl_Emp Set Job_Title="Market Research Analyst" Where Emp_Id=123
Rollback Tran T1
Ouput :
Emp_Id Job_Title
143 Engineer
123 Market Analyst
Savepoint :
Savepoint command is used to temporarily save a transaction so that you can rollback to that point whenever necessary. You can you use multiple save points in a Transaction.
Syntax : Save Transaction SavePoint_Name
Example-I :
In the following Transaction, I am Inserting 3 records into a Table then Saving the Trasaction ( SavePoint 1) and then Updating those 3 records and again Saving the Transaction( SavePoint 2).
Next I am Truncating the Table and Rollback to Save Point then Deleting a Record then Committing the Transaction.
Begin Tran T1
Truncate Table [Emp_Test]
Select * From [dbo].[Emp_Test]
Insert Into [Emp_Test] Values ( 113,'Raju')
Insert Into [Emp_Test] Values ( 114,'Ravi')
Insert Into [Emp_Test] Values ( 115,'Rani')
Save Tran SP1;
Update [Emp_Test] Set Ename='Sai' Where Eid=113
Update [Emp_Test] Set Ename='Shiva' Where Eid=114
Update [Emp_Test] Set Ename='Sloka' Where Eid=115
Save Tran SP2;
Truncate Table [Emp_Test]
Rollback Tran SP1;
Delete From [Emp_Test] Where EId =113
Commit Tran T1 ;
Select * From [dbo].[Emp_Test]
GO
Output :
EId Ename
114 Ravi
115 Rani
Notes :
Here if you observe, we inserted 3 records before SavePoint 1(Save Tran SP1).
But when you Rollback to that Savepoint , we got only 2 records, because we deleted a record after Rollback then Committed the Transaction. So, once you Committed a Transaction after any operation that cannot be rolled back.
Example-II :
Here we Rollback to SavePoint 2 ( Save Tran SP2)
Begin Tran T1
Truncate Table [Emp_Test]
Select * From [dbo].[Emp_Test]
Insert Into [Emp_Test] Values ( 113,'Raju')
Insert Into [Emp_Test] Values ( 114,'Ravi')
Insert Into [Emp_Test] Values ( 115,'Rani')
Save Tran SP1;
Update [Emp_Test] Set Ename='Sai' Where Eid=113
Update [Emp_Test] Set Ename='Shiva' Where Eid=114
Update [Emp_Test] Set Ename='Sloka' Where Eid=115
Save Tran SP2;
Truncate Table [Emp_Test]
Rollback Tran SP2;
Delete From [Emp_Test] Where EId =113
Commit Tran T1 ;
Select * From [dbo].[Emp_Test]
GO
Output :
EId Ename
114 Shiva
115 Sloka
Notes :
Here, if you observe, we updated 3 records before SavePoint 2 (Save Tran SP2).
But when you Rollback to that Savepoint , we got only 2 records, because we deleted a record after Rollback then Committed the Transaction. So, once you Committed a Transaction after any operation that cannot be rolled back.
But when you Rollback to that Savepoint , we got only 2 records, because we deleted a record after Rollback then Committed the Transaction. So, once you Committed a Transaction after any operation that cannot be rolled back.
Example-III :
Here if we try to Rollback to SavePoint 1 and then SavePoint 2 then we will receive an error saying "Cannot roll back SP2. No transaction or savepoint of that name was found" , because SavePoint 2 will be erased from the Memory when you Rollback to prior SavePoint of that (SavePoint 1).
Begin Tran T1
Truncate Table [Emp_Test]
Select * From [dbo].[Emp_Test]
Insert Into [Emp_Test] Values ( 113,'Raju')
Insert Into [Emp_Test] Values ( 114,'Ravi')
Insert Into [Emp_Test] Values ( 115,'Rani')
Save Tran SP1;
Update [Emp_Test] Set Ename='Sai' Where Eid=113
Update [Emp_Test] Set Ename='Shiva' Where Eid=114
Update [Emp_Test] Set Ename='Sloka' Where Eid=115
Save Tran SP2;
Truncate Table [Emp_Test]
Rollback Tran SP1;
Delete From [Emp_Test] Where EId =113
Rollback Tran SP2;
Commit Tran T1 ;
Select * From [dbo].[Emp_Test]
GO
Output :
EId Ename
114 Ravi
115 Rani
Msg 6401, Level 16, State 1, Line 26
Cannot roll back SP2. No transaction or savepoint of that name was found.
Here if we try to Rollback to SavePoint 1 and then SavePoint 2 then we will receive an error saying "Cannot roll back SP2. No transaction or savepoint of that name was found" , because SavePoint 2 will be erased from the Memory when you Rollback to prior SavePoint of that (SavePoint 1).
Begin Tran T1
Truncate Table [Emp_Test]
Select * From [dbo].[Emp_Test]
Insert Into [Emp_Test] Values ( 113,'Raju')
Insert Into [Emp_Test] Values ( 114,'Ravi')
Insert Into [Emp_Test] Values ( 115,'Rani')
Save Tran SP1;
Update [Emp_Test] Set Ename='Sai' Where Eid=113
Update [Emp_Test] Set Ename='Shiva' Where Eid=114
Update [Emp_Test] Set Ename='Sloka' Where Eid=115
Save Tran SP2;
Truncate Table [Emp_Test]
Rollback Tran SP1;
Delete From [Emp_Test] Where EId =113
Rollback Tran SP2;
Commit Tran T1 ;
Select * From [dbo].[Emp_Test]
GO
Output :
EId Ename
114 Ravi
115 Rani
Msg 6401, Level 16, State 1, Line 26
Cannot roll back SP2. No transaction or savepoint of that name was found.
--------------------------------------------------------------------------------------------------------
Thanks, TAMATAM ; Business Intelligence & Analytics Professional
--------------------------------------------------------------------------------------------------------
No comments:
Post a Comment
Hi User, Thank You for visiting My Blog. Please post your genuine Feedback or comments only related to this Blog Posts. Please do not post any Spam comments or Advertising kind of comments which will be Ignored.