將所有死鎖的
死鎖的
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...