单点用户的问题,在线!急急!!

palmkey 2005-05-10 02:53:42
如果我在一台客户机C1上用SA登录到服务器上,但没有退出,我又到另一台客户机C2用SA登录话机,这时我想强行断开C1的连接,怎么实现,谢谢!
...全文
101 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2005-05-11
  • 打赏
  • 举报
回复
--你可以在查询分析器中,执行下面的语句创建一个存储过程

use master
go

create proc sp_killuser
@username sysname=null
as
declare tb cursor local
for
select 'kill '+rtrim(spid) from master.dbo.sysprocesses
where loginame=isnull(@username,suser_sname())
and spid>=50
and hostname<>host_name()
declare @s nvarchar(1000)
open tb
fetch tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch tb into @s
end
close tb
deallocate tb
go

--在需要断开当前用户连接的地方(仅非本机的连接),执行存储过程
exec sp_killuser

--在需要断开指定用户连接的地方(仅非本机的连接),执行存储过程
exec sp_killuser 'sa' --sa为用户名
zjcxc 2005-05-11
  • 打赏
  • 举报
回复
存储过程,手工断开. 我前面已经给你现实性了断开的处理代码,在你连接后,需要断开的时候,只需要执行一下代码就行了.
gulxd 2005-05-11
  • 打赏
  • 举报
回复
访问数据库的用户多的情况下也用这个方法吗?
palmkey 2005-05-10
  • 打赏
  • 举报
回复
这样只能用手工去断开,如何自动实现,
palmkey 2005-05-10
  • 打赏
  • 举报
回复
请问各位,是用存储过程好,还是做成触发器好!!
怎么写
palmkey 2005-05-10
  • 打赏
  • 举报
回复
谢谢各位,
hpl1997 2005-05-10
  • 打赏
  • 举报
回复
同意 libin_ftsafe(子陌红尘)的意见。
具体就是:从C2上用SA登录到服务器上,执行sp_who,这时,在查询出来的数据中,查看hostname列为c1的spid值(若为55),执行kill 55
子陌红尘 2005-05-10
  • 打赏
  • 举报
回复
通过执行存储过程 sp_who 查询另外一个连接到服务器进程的spid,用KILL spid方式根据系统进程 ID (SPID) 终止用户进程。
zjcxc 2005-05-10
  • 打赏
  • 举报
回复
--关掉所有的进程即可,使用下面的处理代码(如果将suser_sname()换成具体的用户名,则关闭指定用户所有非本机的连接)

declare tb cursor local
for
select 'kill '+rtrim(spid) from master.dbo.sysprocesses
where loginame=suser_sname()
and spid>=50
and hostname<>host_name()
declare @s nvarchar(1000)
open tb
fetch tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch tb into @s
end
close tb
deallocate tb

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧