首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

施行存储过程出错

2013-01-08 
执行存储过程出错USE [master]GO/****** Object:StoredProcedure [dbo].[p_killspid]Script Date: 12/05/2

执行存储过程出错


USE [master]
GO
/****** Object:  StoredProcedure [dbo].[p_killspid]    Script Date: 12/05/2012 11:42:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER   proc   [dbo].[p_killspid]    
@dbname   varchar(200)    
as        
declare   @programName     nvarchar(200),    
@spid   nvarchar(20)    
  
declare   cDblogin   cursor   for    
select   cast(spid   as   varchar(20))  AS spid   from   master..sysprocesses   where   dbid=db_id(@dbname)    
open   cDblogin   
fetch   next   from   cDblogin   into   @spid    
while   @@fetch_status=0    
begin       
    
IF  @spid <> @@SPID   
    exec( 'kill   '+@spid)    
fetch   next   from  cDblogin   into   @spid    
end        
close   cDblogin    
deallocate   cDblogin  
 
执行以上存储过程,报SQLExption异常,提示我,只能中止用户进程,求高手解答
[解决办法]


USE [master]
GO
/****** Object:  StoredProcedure [dbo].[p_killspid]    Script Date: 12/05/2012 11:42:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER   proc   [dbo].[p_killspid]    
@dbname   varchar(200)    
as        
declare   @programName     nvarchar(200),    
@spid   nvarchar(20)    
  
declare   cDblogin   cursor   for    
select   cast(spid   as   varchar(20))  AS spid   from   master..sysprocesses   where   dbid=db_id(@dbname)    
open   cDblogin   
fetch   next   from   cDblogin   into   @spid    
while   @@fetch_status=0    
begin       
    
IF  @spid <> @@SPID   
    begin
exec( 'kill   '+ltrim(@spid))    
end
fetch   next   from  cDblogin   into   @spid    
end        
close   cDblogin    
deallocate   cDblogin  





--没看出什么大问题


[解决办法]
spid 在动态变化中 ,当kill时 有可能已经失效 即不存在了 所以。。。
[解决办法]
select   cast(spid   as   varchar(20))  AS spid   from   master..sysprocesses   where   dbid=db_id(@dbname)
And cmd Not in('AWAITING COMMAND','CHECKPOINT SLEEP','LAZY WRITER','LOCK MONITOR','SIGNAL HANDLER')   --不能取消的進程
And spid<>@@spid --不能取消當前進程
[解决办法]
USE [master]
GO
/****** Object:  StoredProcedure [dbo].[p_killspid]    Script Date: 12/05/2012 11:42:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER   proc   [dbo].[p_killspid]    
@dbname   varchar(200)    
as        
declare   @programName     nvarchar(200),    
@spid   nvarchar(20)    
   
declare   cDblogin   cursor   for    
select   cast(spid   as   varchar(20))  AS spid   from   master..sysprocesses   where   dbid=db_id(@dbname)
    And cmd Not in('AWAITING COMMAND','CHECKPOINT SLEEP','LAZY WRITER','LOCK MONITOR','SIGNAL HANDLER')   --不能取消的進程
    And spid<>@@spid --不能取消當前進程
 
open   cDblogin   
fetch   next   from   cDblogin   into   @spid    
while   @@fetch_status=0    
begin       
     
IF  @spid <> @@SPID   
    exec( 'kill   '+@spid)    
fetch   next   from  cDblogin   into   @spid    
end        
close   cDblogin    
deallocate   cDblogin  

热点排行