执行存储过程出错
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