我要删除一个登陆,直接用sp_droplogin的时候系统提示:
//登录 'dubin' 在一个或多个数据库中有别名或映射到了用户上。请除去这些用户或别名后再除去该登录。
于是我就想了个办法,依次查找每个数据库的sysusers,如果存在这个用户就先将他删除,全部都删除完了就可以删除该登陆了。
如此当然可以一个一个数据库的手动查找删除,但要是数据库多了就麻烦了。于是我想通过一个循环,先查 master 数据库中的 sysdatabase 中找出有哪些数据库,在依次循环查找是否有这个用户,有则删除之。如此则需用循环语句,但我不知道T-SQL的循环语句是怎么样的,请高手指教。
还有:
如何查看有哪些用户连接到服务器上?如何强制其退出?
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