乙個資料庫解鎖的儲存過程sp who lock

2021-04-13 13:11:24 字數 1772 閱讀 5001

將所有死鎖

死鎖

id找出來,然後再kill。

set quoted_identifier off

goset ansi_nulls off

gocreate procedure sp_who_lock

asbegin

declare @spid int,@bl int,

@inttransactioncountonentry int,

@introwcount int,

@intcountproperties int,

@intcounter int

create table #tmp_lock_who (id int identity(1,1),spid **allint,bl **allint)

if @@error<>0 return @@error

insert into #tmp_lock_who(spid,bl) select 0 ,blocked

from (select * from sysprocesses where blocked>0 ) a

where not exists(select * from (select * from sysprocesses where blocked>0 ) b

where a.blocked=spid)

union select spid,blocked from sysprocesses where blocked>0

if @@error<>0 return @@error

-- 找到臨時表的記錄數

select @intcountproperties = count(*),@intcounter = 1

from #tmp_lock_who

if @@error<>0 return @@error

if@intcountproperties=0

select '現在沒有阻塞和死鎖資訊' as message

-- 迴圈開始

while @intcounter <= @intcountproperties

begin

-- 取第一條記錄

select @spid = spid,@bl = bl

from #tmp_lock_who where id = @intcounter

begin

if @spid =0

select '引起資料庫死鎖的是: '+ cast(@bl as varchar(10)) + '程序號,其執行的sql語法如下'

else

select '程序號spid:'+ cast(@spid as varchar(10))+ '被' + '程序號spid:'+ cast(@bl as varchar(10)) +'阻塞,其當前程序執行的sql語法如下'

dbcc inputbuffer (@bl )

end-- 迴圈指標下移

set @intcounter = @intcounter + 1

enddrop table #tmp_lock_who

return 0

endgo

set quoted_identifier off

goset ansi_nulls on

go死鎖

乙個資料庫儲存過程小問題

這個資料庫建立沒有什麼難度,但是我就是陷入了一種錯誤的思維,一直跳不出來,剛剛靈光一現,跳出迴圈,終於跳出錯誤的模式,構建好了乙個資料庫儲存過程。1 建立乙個儲存過程no grade,顯示有所選課程沒有成績的學生的學號 姓名 所選全部課程名稱及其成績。use stu cou go create pr...

乙個迴圈插入資料到資料庫的儲存過程

表結構 儲存過程 create proc adddata number int,name nvarchar 50 as 得到最大id,若為空,則id 1 declare id as int select id max id from test sort if id is not null set i...

如何用乙個資料庫的資料去更新另乙個資料庫的內容

愚翁 如何用乙個資料庫的資料去更新另乙個資料庫的內容 上次寫了乙個簡單資料庫之間資料交換的程式,但是考慮到如果資料量大的情況,我所使用的 dataadatper dataset 方法,在效能上就有很大的劣勢。不過,要想在資料量大的資料庫之間能高效地交換,就需要捨棄原先的方法,而改用 dbcomman...