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分別是使用...