use  master 
go
create  proc  killspid  (@dbname  varchar(20))  
as  
begin  
declare  @sql  nvarchar(500),@temp varchar(1000)
declare  @spid  int  
set  @sql='declare  getspid  cursor  for    
select  spid  from  sysprocesses  where  dbid=db_id('''+@dbname+''')'  
exec  (@sql)  
open  getspid  
fetch  next  from  getspid  into  @spid  
while  @@fetch_status<>-1  
begin  
  set @temp='kill  '+rtrim(@spid)
  exec(@temp)
fetch  next  from  getspid  into  @spid  
end  
close  getspid  
deallocate  getspid  
end  --用法  
use  master  
exec  killspid  '数据库名'

解决方案 »

  1.   

    企业管理器->服务器->管理工具->活动->当前活动 然后把他kill掉
    SQL事件探查器,监控一下,看主要是那些处理引起的死锁.然后做相应的处理.
    用事件探查器new一个trace,监视一下造成你sqlserver停顿的情况最好的办法还是检查一下引起锁的原因,一般是由你的代码引起的。
      

  2.   

    /*
    关闭用户打开的进程处理
    */
    use master
    goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_killspid]
    GOcreate proc p_killspid
    @dbname varchar(200) --要关闭进程的数据库名
    as  
    declare @sql  nvarchar(500)  
    declare @spid nvarchar(20) declare #tb cursor for
    select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    open #tb
    fetch next from #tb into @spid
    while @@fetch_status=0
    begin  
    exec('kill '+@spid)
    fetch next from #tb into @spid
    end  
    close #tb
    deallocate #tb
    go--用法  
    exec p_killspid  '数据库名'
      

  3.   

    --查看锁信息
    select 进程id=req_spid
    ,数据库=db_name(rsc_dbid)
    ,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
    when 2 then '数据库'
    when 3 then '文件'
    when 4 then '索引'
    when 5 then '表'
    when 6 then '页'
    when 7 then '键'
    when 8 then '扩展盘区'
    when 9 then 'RID(行 ID)'
    when 10 then '应用程序'
    end
    ,rsc_objid,rsc_indid
     from master..syslockinfo
      

  4.   

    杀掉指定进程:
    kill 进程id