sqlserver事務的用法

2021-06-12 22:17:19 字數 2670 閱讀 2608

事務(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 開發環境下,有兩種方法能夠完成事務的操作...