乙個帶事務的Sql Server儲存過程例子

2021-10-25 10:21:43 字數 2071 閱讀 2587

create

procedure

[dbo]

.[sp_delete_transample]

asbegin

--set nocount on; --(注意:set nocount on 不返回受影響的行數, 前端executenonquery 得到的受影響行數為-1)

begin

begin try

begin

tran

delete

from table1 where..

..delete

from table2 where..

..commit

tran

end try

begin catch

--rollback tran --放在這裡也可以

if @@trancount

>

0--(存在未執行成功的事務,則回滾. 注1)

begin

rollback

tran

--print error_message()

endend catch

end--注1:每一次begin transaction都會引起@@trancount加1。而每一次commit transaction都會使@@trancount減1,而rollback transaction會回滾所有的巢狀事務包括已經提交的事務和未提交的事務,而使@@trancount置0。

另一例子:

create

procedure sp_copy_jobregmasterdetail(

@masterrefno

int,

--job_reg_master's refno field

@jobno

asvarchar(50

),--job_reg_master's jobno field

@jobnotype

asvarchar(20

)--job type. default 'js')as

begin

begin try

begin

tran

-- 1. insert job_reg_master

insert

into job_reg_master values(.

..)-- 2. insert job_reg_detail

if @@rowcount=0

begin

select

0return

enddeclare

@refno_details

asint

declare curdetail cursor

forselect refno from job_reg_details where jobno =

@jobno

andstatus

='a'

order

by itemno

open curdetail

fetch

next

from curdetail into

@refno_details

while

(@@fetch_status!=-

1)begin

insert

into job_reg_details values(.

..)fetch

next

from curdetail into

@refno_details

endclose curdetail

deallocate curdetail

commit

tran

end try

begin catch

if @@trancount

>

0begin

--print error_message()

rollback

tran

select

0end

end catch

end

乙個簡單的事務

從這篇開始要總結事務了,我們就從乙個簡單的事務示例開始吧。下面這個示例首先定義了乙個事務,然後把關於乙個新訂單的資料記錄到資料庫中。示例 如下 use tsqlfundamentals2008 go 事務 乙個簡單的事務 begin tran 宣告乙個變數,儲存新的orderid declare n...

Spring 在乙個事務中開啟另乙個的事務

什麼是事務?可以參考我的這篇部落格!spring boot 怎麼使用spring的事務控制機制?可以參考我的這篇部落格!通常的情況下,一般的事務直接在service類上新增 transactional註解,spring就會幫我們替所有方法自動生成事務。但是在某些情況下,很少出現的。我們希望在乙個方法...

連線sql server的乙個方法

string mystr data source localhost initial catalog scl user id sa password 設定連線字串。data source 為資料庫所在的ip位址。initial catalog 為資料庫名字。user id和password分別是使用...