获取连接信息非常容易sp_who 断开连接使用:kill pidpid为连接信息中的ID 下面是断开指定库的所有用户连接的一个过程(在master数据库中进行) use master go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_KillSpid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[sp_KillSpid] GO
create proc sp_KillSpid @dbname sysname --要断开连接的数据库名 as declare @s nvarchar(1000) declare tb cursor local for select N'kill '+cast(spid as varchar) from master..sysprocesses where dbid=db_id(@dbname)
open tb fetch next from tb into @s while @@fetch_status=0 begin exec(@s) fetch next from tb into @s end close tb deallocate tb go
消息 3702,级别 16,状态 3,第 1 行
无法删除数据库 "sp_procom",因为该数据库当前正在使用。
use master
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_KillSpid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_KillSpid]
GO
create proc sp_KillSpid
@dbname sysname --要断开连接的数据库名
as
declare @s nvarchar(1000)
declare tb cursor local
for
select N'kill '+cast(spid as varchar)
from master..sysprocesses
where dbid=db_id(@dbname)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go
--调用
exec sp_KillSpid 'aa'
这个跟.net没关系,这是数据库的问题!
看看这个方法
这个跟.net没关系,这是数据库的问题!有点关系的,2005是基于.net 2.0的开发,如果.net挂掉了,那么数据库也用不了的,如果这个问题是因为系统自动打完补丁后才出现的,那就有70%的机率是.net挂掉了