儲存過程中使用事務

2021-04-12 23:52:57 字數 1766 閱讀 9074

create procedure updatewanjun

@username nvarchar(500),

@userpassword nvarchar(500),

@returnval int output

as  

--set xact_abort on

begin transaction t

update admins set userpassword = @userpassword where username = @username

update admins set userpassword = @userpassword,a='aaadfasdfasdfas' where id=4          --出錯語句 ,a為int型,大小為預設值4

--set @returnval=@@rowcount(這個變數,只能在緊挨著它的上面sql下起作用,這樣才能返回值,只有放在update下面才管用)

if @@error <> 0

begin

print '111' 

rollback transaction t

endelse

print '222'

commit transaction t

go如果在乙個儲存過程中執行呼叫另乙個伺服器上的儲存過程時,新增事務時需要使用

begin distributed transaction來開始事務(分布式事務)

begin distributed tran [ saction ]

[ transaction_name | @tran_name_variable ]

引數transaction_name

是使用者定義的事務名,用於跟蹤 ms dtc 實用工具中的分布式事務。transaction_name 必須符合識別符號規則,但是僅使用頭 32 個字元。

@tran_name_variable

是使用者定義的乙個變數名,它含有乙個事務名,該事務名用於跟蹤 ms dtc 實用工具中的分布式事務。必須用charvarcharncharnvarchar資料型別宣告該變數。

注釋執行 begin distributed transaction 語句的伺服器是事務建立人,並且控制事務的完成。當連線發出後續 commit transaction 或 rollback transaction 語句時,主控伺服器請求 ms dtc 在所涉及的伺服器間管理分布式事務的完成。

有兩個方法可將遠端 sql 伺服器登記在乙個分布式事務中:

例如,如果在servera上發出 begin distributed transaction,該連線呼叫serverb上的儲存過程和serverc上的另乙個儲存過程,並且serverc上的儲存過程對serverd執行乙個分布式查詢,那麼四個 sql 伺服器都進入分布式事務中了。servera是該事務的建立者和控**務器。

分布式事務 transact-sql 涉及的連線並不獲取可以傳給另乙個連線的事務物件,從而也不能用該方法顯式登記在分布式事務中。遠端伺服器登記到事務中的唯一方法是成為遠端儲存過程呼叫或分布式查詢的目標。

預設情況下,任何有效使用者都擁有 begin distributed transaction 許可權。

mysql儲存過程中使用事務

mysql儲存過程中使用事務 1 drop procedure ifexists test sp1 2create procedure test sp1 3begin 4declare t error integer default 0 5declare continue handler for s...

SQL SERVER儲存過程中使用事務

儲存過程格式 create procedure yourprocedure asbegin set nocount on begin try 開始捕捉異常 bein tran 開始事務 update a set a.names b.names from t1 as a inner join t2 a...

SqlServer儲存過程中使用事務,示例

create proc pro getprotrans goodsid int,number int,stockprice money,supplierid int,empid int,stockunit varchar 50 stockdate datetime,totalmoney money ...