查询连接数
select count(*) from master.dbo.sysprocesses
这条语句查出来的是所有连接到本机(或者连接到本服务器)的连接数,并非是某一个库的连接数。
查询连接的库名和对应连接的user
select db_name(dbid) dbName,user_name(uid) [user] from sys.sysprocesses
查询连接到指定库的数量、user
select COUNT(*) from sys.sysprocesses where db_name(dbid) = @dbId
-- 查询连接到指定库的数量 @dbId [指定的库名]
select distinct user_name(uid) [user] from sys.sysprocesses where db_name(dbid) = @dbId
-- 查询连接到指定库的user @dbId [指定的库名]
强行干掉连接
-- 存储过程
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[p_killspid]
go
create proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @programName nvarchar(200),
@spid nvarchar(20)
declare cDblogin cursor for
select cast(spid as varchar(20)) AS spid from master..sysprocesses where dbid=db_id(@dbname)
open cDblogin
fetch next from cDblogin into @spid
while @@fetch_status=0
begin
--防止自己终止自己的进程
--否则会报错不能用KILL 来终止您自己的进程。
IF @spid <> @@SPID
exec( 'kill '+@spid)
fetch next from cDblogin into @spid
end
close cDblogin
deallocate cDblogin
go
-- 执行
exec p_killspid 'your database'
或者
DECLARE @temp NVARCHAR(20)
DECLARE myCurse CURSOR
FOR
SELECT spid
FROM sys.sysprocesses
WHERE dbid = DB_ID('your database')
OPEN myCurse
FETCH NEXT FROM myCurse INTO @temp
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('kill '+@temp)
FETCH NEXT FROM myCurse INTO @temp
END
CLOSE myCurse
DEALLOCATE myCurse