查詢連接數
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