怎么查询指定数据所关联的会话或者连接?

bala7229291 2013-04-03 10:55:31
问这个问题的起因是:在删除数据库时,如果目标数据库有连接的话,drop database就会失败(当然,可以在查询管理器里删除数据库并关闭连接,但我这里想了解的是直接用T-SQL语句来完成)。

在网上找了一些方法,发现用到一个系统表sysprocesses和一个兼容视图sys.sysprocesses可以将会话ID和数据库ID关联起来,这样就可以根据数据库名关联的ID找到会话ID,然后使用kill语句来结束会话,进而再去删除数据库,这条路是可行的!

但是考虑到系统表和兼容视图是为了向后兼容,考虑到今后可能会被取消的问题,我想尽量使用2005中提供的目录视图或者动态视图来完成这个处理,有没有朋友知道怎么弄的,请指教,谢谢!
...全文
95 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
szm341 2013-04-03
  • 打赏
  • 举报
回复
引用 2 楼 bala7229291 的回复:
楼上的朋友,我倒测试过你说的方法,但是就算单用户,只要连接着,那么数据库不是也可能删除不掉吗?还是我理解有误?
WITH ROLLBACK IMMEDIATE 强制所有事务立即回滚,这个可以理解为断开所有会话连接吧
水族杰纶 2013-04-03
  • 打赏
  • 举报
回复
引用 2 楼 bala7229291 的回复:
引用 1 楼 szm341 的回复:先改成单用户模式再drop呗 ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE go DORP DATABASE dbname 楼上的朋友,我倒测试过你说的方法,但是就算单用户,只要连接着,那么数据库不是也可能删除不掉吗?还是我理解有误? ……
ALTER DATABASE dbname SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
DORP DATABASE dbname
bala7229291 2013-04-03
  • 打赏
  • 举报
回复
引用 1 楼 szm341 的回复:
先改成单用户模式再drop呗 ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE go DORP DATABASE dbname
楼上的朋友,我倒测试过你说的方法,但是就算单用户,只要连接着,那么数据库不是也可能删除不掉吗?还是我理解有误?
szm341 2013-04-03
  • 打赏
  • 举报
回复
先改成单用户模式再drop呗 ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE go DORP DATABASE dbname

22,300

社区成员

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

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