關於SqlServer2008小記(查詢數據庫連接數,強行干掉連接)


查詢連接數

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM