為什麼使用事務
當對多個表進行更新的時候,某條執行失敗。為了保持資料的完整性,需要使用交易回復。
顯示設定事務
begin try begin transaction insert into shiwu (asd) values ('aasdasda'); commit transaction end try begin catch select ERROR_NUMBER() as errornumber rollback transaction end catch
隱式設定事務
set implicit_transactions on; -- 啟動隱含交易 go begin try insert into shiwu (asd) values ('aasdasda'); insert into shiwu (asd) values ('aasdasda'); commit transaction; end try begin catch select ERROR_NUMBER() as errornumber rollback transaction; --復原事務 end catch set implicit_transactions off; --關閉隱含交易 go
顯示事務以下語句不能使用,隱含交易可以
alter database;
backup;
create database;
drop database;
reconfigure;
restore;
update statistics;
顯示事務可以嵌套使用
--建立預存程序 create procedure qiantaoProc @asd nchar(10) as begin begin try begin transaction innerTrans save transaction savepoint --建立事務儲存點 insert into shiwu (asd) values (@asd); commit transaction innerTrans end try begin catch rollback transaction savepoint --復原到儲存點 commit transaction innerTrans end catch end go begin transaction outrans exec qiantaoProc 'asdasd'; rollback transaction outrans
事務嵌套,復原外層事務時,如果嵌套內的事務已經復原過則會有異常。此時需要使用事務儲存點。如上代碼。