SQL Server重溫 事務(wù)
更新時(shí)間:2012年08月03日 16:50:22 作者:
當(dāng)對(duì)多個(gè)表進(jìn)行更新的時(shí)候,某條執(zhí)行失敗。為了保持?jǐn)?shù)據(jù)的完整性,需要使用事務(wù)回滾
為什么使用事務(wù)
當(dāng)對(duì)多個(gè)表進(jìn)行更新的時(shí)候,某條執(zhí)行失敗。為了保持?jǐn)?shù)據(jù)的完整性,需要使用事務(wù)回滾。
顯示設(shè)置事務(wù)
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
隱式設(shè)置事務(wù)
set implicit_transactions on; -- 啟動(dòng)隱式事務(wù)
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; --回滾事務(wù)
end catch
set implicit_transactions off; --關(guān)閉隱式事務(wù)
go
顯示事務(wù)以下語(yǔ)句不能使用,隱式事務(wù)可以
alter database;
backup;
create database;
drop database;
reconfigure;
restore;
update statistics;
顯示事務(wù)可以嵌套使用
--創(chuàng)建存儲(chǔ)過(guò)程
create procedure qiantaoProc
@asd nchar(10)
as
begin
begin try
begin transaction innerTrans
save transaction savepoint --創(chuàng)建事務(wù)保存點(diǎn)
insert into shiwu (asd) values (@asd);
commit transaction innerTrans
end try
begin catch
rollback transaction savepoint --回滾到保存點(diǎn)
commit transaction innerTrans
end catch
end
go
begin transaction outrans
exec qiantaoProc 'asdasd';
rollback transaction outrans
事務(wù)嵌套,回滾外層事務(wù)時(shí),如果嵌套內(nèi)的事務(wù)已經(jīng)回滾過(guò)則會(huì)有異常。此時(shí)需要使用事務(wù)保存點(diǎn)。如上代碼。
當(dāng)對(duì)多個(gè)表進(jìn)行更新的時(shí)候,某條執(zhí)行失敗。為了保持?jǐn)?shù)據(jù)的完整性,需要使用事務(wù)回滾。
顯示設(shè)置事務(wù)
復(fù)制代碼 代碼如下:
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
隱式設(shè)置事務(wù)
復(fù)制代碼 代碼如下:
set implicit_transactions on; -- 啟動(dòng)隱式事務(wù)
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; --回滾事務(wù)
end catch
set implicit_transactions off; --關(guān)閉隱式事務(wù)
go
顯示事務(wù)以下語(yǔ)句不能使用,隱式事務(wù)可以
復(fù)制代碼 代碼如下:
alter database;
backup;
create database;
drop database;
reconfigure;
restore;
update statistics;
顯示事務(wù)可以嵌套使用
復(fù)制代碼 代碼如下:
--創(chuàng)建存儲(chǔ)過(guò)程
create procedure qiantaoProc
@asd nchar(10)
as
begin
begin try
begin transaction innerTrans
save transaction savepoint --創(chuàng)建事務(wù)保存點(diǎn)
insert into shiwu (asd) values (@asd);
commit transaction innerTrans
end try
begin catch
rollback transaction savepoint --回滾到保存點(diǎn)
commit transaction innerTrans
end catch
end
go
begin transaction outrans
exec qiantaoProc 'asdasd';
rollback transaction outrans
事務(wù)嵌套,回滾外層事務(wù)時(shí),如果嵌套內(nèi)的事務(wù)已經(jīng)回滾過(guò)則會(huì)有異常。此時(shí)需要使用事務(wù)保存點(diǎn)。如上代碼。
相關(guān)文章
SQL Server2008數(shù)據(jù)庫(kù)導(dǎo)入導(dǎo)出兼容性處理方案
SQL Server 的高版本數(shù)據(jù)庫(kù)恢復(fù)到低版本則可能會(huì)有兼容性問(wèn)題,下面為大家介紹的是如何解決此類問(wèn)題2014-05-05
SQL Server數(shù)據(jù)庫(kù)的高性能優(yōu)化經(jīng)驗(yàn)總結(jié)
小編以前在做ASP及.NET的時(shí)候經(jīng)常用到SQL SERVER,現(xiàn)在用PHP雖然大多數(shù)時(shí)候用MYSQL,但不泛有些客戶要在原來(lái)SQL的平臺(tái)上升級(jí)或兼容開發(fā),值得慶幸的是PHP無(wú)所不能,基本上所有的數(shù)據(jù)庫(kù)它都能連接并支持2011-07-07
SQLSERVER聚集索引和主鍵(Primary Key)的誤區(qū)認(rèn)識(shí)
很多人會(huì)把Primary Key和聚集索引搞混起來(lái),或者認(rèn)為這是同一個(gè)東西。這個(gè)概念是非常錯(cuò)誤的,本文將帶你理清思路,感興趣的你可不要錯(cuò)過(guò)了哈,或許本文對(duì)你有所幫助2013-02-02
Linux安裝ODBC連接SQLServer數(shù)據(jù)庫(kù)的步驟
這篇文章主要介紹了Linux安裝ODBC連接SQLServer數(shù)據(jù)庫(kù)?,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
SQLServer 獲得用戶最新或前n條訂單的幾種SQL語(yǔ)句小結(jié)
場(chǎng)景:有一張用戶表,一個(gè)訂單表,要求獲得一個(gè)用戶對(duì)應(yīng)的最新的一條訂單信息。2011-08-08
SQL Server代理服務(wù)無(wú)法啟動(dòng)的解決方法
錯(cuò)誤MSSQLSERVERSQLServerAgent could not be started (reason: SQLServerAgent 必須能夠以 SysAdmin 身份連接到 SQLServer,但“(未知)”不是 SysAdmin 角色的成員)2013-02-02
SQL Server常見(jiàn)問(wèn)題及解決方法分享
這篇文章主要為大家詳細(xì)介紹了SQL Server常見(jiàn)問(wèn)題及解決方法,包括SQL Server連接問(wèn)題,SQL Server日志問(wèn)題,SQL Server查詢很久等問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
sql中的left join及on、where條件關(guān)鍵字的區(qū)別詳解
LEFT JOIN 關(guān)鍵字從左表(table1)返回所有的行,即使右表(table2)中沒(méi)有匹配。如果右表中沒(méi)有匹配,則結(jié)果為 NULL。這篇文章主要介紹了sql中的left join以及on、where關(guān)鍵字的區(qū)別,需要的朋友可以參考下2018-08-08

