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 这又是为什么???
帮帮忙吧,估计这个问题比较麻烦,但我要用,谢谢啦!!!

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)            fetch next from getspid into @spid       Close getspid
风中客 说:

谢谢啦!我是一个初学者,也是头一次用到游标,我对它的用法还不清楚。谢谢你们的帮忙,更谢谢你又给我指点了游标的用法,我在这里谢谢各位的帮助了!!!


对了,我再问一下,备份正在运行的数据库要杀进程吗?我在网上查他都没有说,只是在还原数据库的时候才说要杀进程,我对这点不清楚,请高手帮忙解释一下,我在这里先谢谢啦!!!



你是不是说:
1 数据库在被其它session使用时是否可以进行备份?
答:可以
2 数据库在被其它session使用时是否可以进行还原?
答:不行, 例如session1 和session2都在使用数据库A,
如果在session1中还原数据库,该操作会尝试获得排他锁(X),X锁和session2的锁不兼容,所以无法进行还原操作。

stswordman
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)            fetch next from getspid into @spid       Close getspid
风中客 说:

谢谢啦!我是一个初学者,也是头一次用到游标,我对它的用法还不清楚。谢谢你们的帮忙,更谢谢你又给我指点了游标的用法,我在这里谢谢各位的帮助了!!!


对了,我再问一下,备份正在运行的数据库要杀进程吗?我在网上查他都没有说,只是在还原数据库的时候才说要杀进程,我对这点不清楚,请高手帮忙解释一下,我在这里先谢谢啦!!!



你是不是说:
1 数据库在被其它session使用时是否可以进行备份?
答:可以
2 数据库在被其它session使用时是否可以进行还原?
答:不行, 例如session1 和session2都在使用数据库A,
如果在session1中还原数据库,该操作会尝试获得排他锁(X),X锁和session2的锁不兼容,所以无法进行还原操作。

stswordman