T-SQL是否有循环语句?类似C语言的for?如何查看有哪些用户连接到服务器上?如何强制其退出?

robter5611 2005-01-10 04:27:02
我要删除一个登陆,直接用sp_droplogin的时候系统提示:
//登录 'dubin' 在一个或多个数据库中有别名或映射到了用户上。请除去这些用户或别名后再除去该登录。

于是我就想了个办法,依次查找每个数据库的sysusers,如果存在这个用户就先将他删除,全部都删除完了就可以删除该登陆了。
如此当然可以一个一个数据库的手动查找删除,但要是数据库多了就麻烦了。于是我想通过一个循环,先查 master 数据库中的 sysdatabase 中找出有哪些数据库,在依次循环查找是否有这个用户,有则删除之。如此则需用循环语句,但我不知道T-SQL的循环语句是怎么样的,请高手指教。
还有:
如何查看有哪些用户连接到服务器上?如何强制其退出?

请多指教,感谢感谢!
...全文
838 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
郭大侠_ 2005-01-15
  • 打赏
  • 举报
回复
用游标好!
Qihua_wu 2005-01-15
  • 打赏
  • 举报
回复
while condition
begin
.....
end
robter5611 2005-01-15
  • 打赏
  • 举报
回复
老兄能否再详解以下:
select N'use ['+replace(name,N']',N']]')
+N']
if exists(select * from sysusers where islogin=1 and name=@username)
exec sp_revokedbaccess @name_in_db = @username'
from master.dbo.sysdatabases

这段不怎么看得懂,好象括号不匹配哦。
zjcxc 2005-01-11
  • 打赏
  • 举报
回复
--写个游标处理就行了

declare @username sysname
set @username='aa' --要删除的登录名

--删除处理
declare @s nvarchar(4000)
declare tb cursor local for
select N'use ['+replace(name,N']',N']]')
+N']
if exists(select * from sysusers where islogin=1 and name=@username)
exec sp_revokedbaccess @name_in_db = @username'
from master.dbo.sysdatabases
open tb
fetch tb into @s
while @@fetch_status=0
begin
exec sp_executesql @s,N'@username sysname',@username
fetch tb into @s
end
close tb
deallocate tb
exec sp_droplogin @loginame = @username
hai2003xp 2005-01-10
  • 打赏
  • 举报
回复
學習,關注.....
good2speed 2005-01-10
  • 打赏
  • 举报
回复
用sp_who可以知道谁联到服务器上.你同时能用这个存储过程得到SPID,使用下面的语句

KILL
根据系统进程 ID (SPID) 终止用户进程。如果指定的 SPID 或 UOW 有许多工作要取消,KILL 命令可能需要一些时间来完成,特别是在涉及回滚长事务时。

如果你要循环数据库,你可看看这篇文章
http://www.cnblogs.com/goodspeed/archive/2004/11/04/60241.html

虽然没有直接遍历数据库的,但你可以改改,我想就能用了.

27,580

社区成员

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

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