關於SqlServer 儲存過程事件未提交造成死鎖

2021-10-08 09:45:56 字數 1081 閱讀 5759

首先建立乙個表   

create table ceshisisuo(a varchar(10),b varchar(10),c varchar(10),d varchar(10))

然後隨便建立乙個儲存過程

create proc [dbo].[ceshisisuo](@a varchar(10),@b varchar(10),@c varchar(10),@d varchar(10))

asdeclare @errmsg varchar(200)

begin try 

set @errmsg = '插入**失敗'

begin tran

insert into ceshisisuo(a,b,c,d) values (@a,@b,@c,@d) 

select result = '插入**成功'

end try 

begin catch 

select result = @errmsg

end catch 

在上述過程中,明顯的一開始有begin tran  開始事務。在結束的時候沒有commit tran 提交事務,和try異常的時候 rollback transaction 回滾事務

只要執行了 exec ceshisisuo('1','2','3','4')  就會造成死鎖。

select object_name(resource_associated_entity_id) as tablename, request_session_id as pid from sys.dm_tran_locks

where resource_type = 'object'

就可以看到死鎖的**。   接著kill 掉。**就會解除死鎖。

但是儲存過程中,需要改進的是。要新增提交事務和回滾事務。

在insert into後面新增 if @@trancount > 0 commit transaction  提交事務

在try的    begin catch後面新增  if @@trancount > 0 rollback transaction  回滾事務。在執行儲存過程,就不會造成死鎖。

這就是最簡單的死鎖和解除死鎖。

sql server儲存過程

建立表的語句 create table student sno int primary key,sname nvarchar 30 sgentle nvarchar 2 sage int,sbirth smalldatetime,sdept nvarchar 30 drop table studen...

SQLSERVER儲存過程

sqlserver儲存過程使用說明書 引言首先介紹一下什麼是儲存過程 儲存過程就是將常用的或很複雜的工作,預先用 sql語句寫好並用乙個指定的名稱儲存起來,並且這樣的語句是放在資料庫中的,還可以根據條件執行不同 sql語句,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫 ex...

SQL Server 儲存過程

儲存過程概念 儲存過程優點 儲存過程的介面 儲存過程的解析 編譯過程 儲存過程安全性 檢視儲存過程 加密 解密儲存過程 儲存過程概念 儲存過程 stored procedure 是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中。使用者通過指定儲存過程的名字並給出引數 帶參儲存過程 來執行...