关于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

 

转载于:https://www.cnblogs.com/MirageFox/p/6798121.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值