如何同时断开多个客户端与系统建立的多个会话。

orablue 2003-10-10 12:01:58
A,B两个用户都属于KKK这个角色。
现在在前台我先用A连接后台数据库,然后在前台注销在用B连接到后台数据库,这里连接的是同一个数据库。让后我在用一个具有SYSADMIN权限的用户在前台连接后台数据库。这个时候,我执行SP_DROPUSER,SP_DROPLOGIN,SP_DROPROLE来删除这个角色里面(先删除该角色的用户,在删除角色)。但是这个时候提示A,B与后台有连接。也就是说我注销的时候,A,B都没有与后台数据库断开,所以我想在用户注销的让它与后台连接login彻底断开,应该怎么做?
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zarge 2003-10-10
  • 打赏
  • 举报
回复
alter database dbname set SINGLE_USER with ROLLBACK IMMEDIATE
pengdali 2003-10-10
  • 打赏
  • 举报
回复
use master
go
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500),@temp varchar(1000)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
set @temp='kill '+rtrim(@spid)
exec(@temp)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end

--用法
use master
exec killspid '数据库名'
orablue 2003-10-10
  • 打赏
  • 举报
回复
if MessageDlg('如果你删除了这个部门,这个部门的人员也会一起删除,您确定吗?'+#10#13+'确认删除;'+#10#13+'否则忽略!',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
deptname :=listview1.Selected.subitems[0];
with ut_data.wygl_data do
begin
try
try
query_user.Close ;
query_user.SQL.Clear ;
query_user.SQL.add('select username from usertb where dept='+#39+deptname+#39+' order by id');
query_user.Open ;
query_user.First ;
while not query_user.Eof do
begin
username :=query_user.fieldbyname('username').AsString ;
query_menu.Close ;
query_menu.SQL.Clear ;
query_menu.sql.add('exec sp_dropuser '+#39+username+#39);
query_menu.ExecSQL ;
query_menu.Close ;
query_menu.SQL.Clear ;
query_menu.SQL.Add('exec sp_droplogin '+#39+username+#39);
query_menu.ExecSQL ;
query_user.Next ;
end;
query_user.Close ;
query_user.sql.Clear ;
query_user.sql.add(' exec sp_droprole '+#39+deptname+#39) ;
query_user.ExecSQL ;
query_user.Close ;
query_user.SQL.Clear ;
query_user.SQL.Add(' delete from dept where dept='+#39+deptname+#39) ;
query_user.ExecSQL ;
query_user.Close ;
query_user.SQL.Clear ;
query_user.SQL.add(' delete from usertb where dept='+#39+deptname+#39) ;
query_user.ExecSQL ;
except
on e:exception do
begin
showmessage('发生错误:'+e.Message );
exit;
end;
end;
finally
showmessage('数据提交成功!');
ut_xtgl.qxgl.FormCreate(self);
end;
end;
end;
-----------------------------
这个过程中间是否可以加入事务控制?
orablue 2003-10-10
  • 打赏
  • 举报
回复
但是,由于A,B两个用户是我在前台通过sp_addlogin , sp_adduser程序建立的
,他们的权限均都是在当前数据库,当我要删除这个角色的时候,由于这个角色里面的A,B两个用户都logined,所以要killspid,但是这个时候,如果killspid以后,那么前台系统不就和后台数据库断开了连接了吗?这个时候,我怎么可以在删除这个角色呢?如果紧接着要马上在删除下一个角色那怎么办?是不是马上在建立连接呢?

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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