事務(transaction
)是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。
通過事務,
sql server
能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。
現在通過乙個典型的銀行轉賬的例子來說明一下
首先建立乙個表:
create database aaaa --建立乙個表,包含使用者的帳號和錢數
gouse aaaa
create table bb
(id int not null primary key, --帳號
moneys money --轉賬金額
)insert into bb values ('1','2000') --插入兩條資料
insert into bb values ('2','3000')
用這個表建立乙個儲存過程:
create procedure mon --建立儲存過程,定義幾個變數
@toid int, --接收轉賬的賬戶
@fromid int , --轉出自己的賬戶
@momeys money --轉賬的金額
asbegin tran --開始執行事務
update bb set moneys=moneys-@momeys where id=@fromid -執行的第乙個操作,轉賬出錢,減去轉出的金額
update bb set moneys=moneys+@momeys where id=@toid --執行第二個操作,接受轉賬的金額,增加
if @@error<>0 --判斷如果兩條語句有任何一條出現錯誤
begin rollback tran –開始執行事務的回滾,恢復的轉賬開始之前狀態
return 0
endgo
else --如何兩條都執行成功
begin commit tran 執行這個事務的操作
return 1
endgo
set xact_abort on ---如果不設定該項為on,在sql中預設為off,那麼只只回滾產生錯誤的 transact-sql 語句;設為on,回滾整個事務
begin tran t1 ---啟動乙個事務
update [water].[dbo].[errorinf]
set errormessage='test'
where id=6
insert into [water].[dbo].[errorinf]([id],errormessage,[description])
values(1,'test1','test1')
commit tran t1 ---提交事務
功能:實現begin tran 和commit tran之間的語句,任一如果出現錯誤,所有都不執
事務不是有錯就回滾的,在不寫rollback的情況下,並不是什麼錯誤都會回滾事務,有時回滾當前語句,有時回滾整個事務
如例
begin tran
insert into dbo.area values('1111')
insert into dbo.area values('2222')
select 1/0
insert into dbo.area values('333')
commit
像這樣,就算中間有錯,也不會回滾,結果會成功新增三條記錄
但有人說,比如重大錯誤,這事務也會所有回滾,只是我無法重現重大錯誤罷了
普通錯誤如果想回滾整個事務,只要加個set xact_abort on就可以了
set xact_abort on
begin tran
insert into dbo.area values('1111')
insert into dbo.area values('2222')
select 1/0
insert into dbo.area values('333')
commit
後來發現sql2005支援try
begin try
begin transaction
insert into dbo.area values('1111')
insert into dbo.area values('2222')
select 1/0
insert into dbo.area values('333')
commit
end try
begin catch
if @@trancount > 0
rollback
declare @errmsg nvarchar(4000), @errseverity int
select @errmsg = error_message(),
@errseverity = error_severity()
raiserror(@errmsg, @errseverity, 1)
end catch
Sql Server事務簡單用法
1 var constr server localhost database data user sa pwd 123456 2using var connection new sqlconnection constr 3 where stationnum 58365 and datetime 8....
Sql server 事務的兩種用法
事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server 能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。在 sql server net 開發環境下,有兩種方法能夠完成事務的操作...
Sql server 事務的兩種用法
事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server 能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。在 sql server net 開發環境下,有兩種方法能夠完成事務的操作...