create proc killspid
(@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for select spid from master..sysprocesses where dbid=db_id(
'''+@dbname+''')'
exec (@sql) open getspid fetch next from getspid into @spid while @@fetch_status<>-1
begin
if (@spid <> @@spid) /*自己不用杀,@@spid表示自己*/ begin exec('kill
'+@spid
) end
fetch next from getspid into @spid end
在查询分析器中老是显示:
消息 102,级别 15,状态 1,过程 killspid,第 12 行
'end' 附近有语法错误。
请看看是为什么?我一直看的不太懂。
@spid不是声明的一个int类型的数字吗,而cursor不是一个集合吗 怎么能赋值给@sqpid啊,我一直很不明白。
还有就是在执行exec('kill',+@sqid)之后,又要执行fetch next from getspid into @spid 这又是为什么???
帮帮忙吧,估计这个问题比较麻烦,但我要用,谢谢啦!!!
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status
begin
exec('kill '+@spid)
fetch next from getspid into @spid
Close getspid
谢谢啦!我是一个初学者,也是头一次用到游标,我对它的用法还不清楚。谢谢你们的帮忙,更谢谢你又给我指点了游标的用法,我在这里谢谢各位的帮助了!!!
对了,我再问一下,备份正在运行的数据库要杀进程吗?我在网上查他都没有说,只是在还原数据库的时候才说要杀进程,我对这点不清楚,请高手帮忙解释一下,我在这里先谢谢啦!!!
你是不是说:
1 数据库在被其它session使用时是否可以进行备份?
答:可以
2 数据库在被其它session使用时是否可以进行还原?
答:不行, 例如session1 和session2都在使用数据库A,
如果在session1中还原数据库,该操作会尝试获得排他锁(X),X锁和session2的锁不兼容,所以无法进行还原操作。
stswordman
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status
begin
exec('kill '+@spid)
fetch next from getspid into @spid
Close getspid
谢谢啦!我是一个初学者,也是头一次用到游标,我对它的用法还不清楚。谢谢你们的帮忙,更谢谢你又给我指点了游标的用法,我在这里谢谢各位的帮助了!!!
对了,我再问一下,备份正在运行的数据库要杀进程吗?我在网上查他都没有说,只是在还原数据库的时候才说要杀进程,我对这点不清楚,请高手帮忙解释一下,我在这里先谢谢啦!!!
你是不是说:
1 数据库在被其它session使用时是否可以进行备份?
答:可以
2 数据库在被其它session使用时是否可以进行还原?
答:不行, 例如session1 和session2都在使用数据库A,
如果在session1中还原数据库,该操作会尝试获得排他锁(X),X锁和session2的锁不兼容,所以无法进行还原操作。
stswordman