如何判断SQL Server中某数据库的访问用户数。(大侠救命啊 )(200分)

  • 主题发起人 主题发起人 sundart
  • 开始时间 开始时间
S

sundart

Unregistered / Unconfirmed
GUEST, unregistred user!
对于XX 数据库, 如果是第一个用户登录就将XX数据库中的Table1表中数据清空。
所以我需要得到当前XX库的访问用户的正确数目。
请问如何做?
 
好像用 sp_config 能够得到,查一下吧!
 
反过来做行不行?
把Table1表做成全局临时表,当最后一个用户断开连接的时候会自动删除。
在程序中判断如果没有这个表,就建立(也就是第一个用户连接到这个表)。

这样好像更简单一点。

 
softdog老兄:
//把Table1表做成全局临时表,当最后一个用户断开连接的时候会自动删除。
如果Table1 表做成全局临时表后,只有当最后一个用户断开连接时才会自动删除这样是最
好不过的了。我开始就是这样做的,不知道是我的临时表没建对还是怎么回事?
在实际操作中发现当其中某个用户断开连接的时候。全局临时表就会自动删除,
所有没办法后才会建实体表。全局临时表是不是就是在表名加##号。

请继续指点。

 
sorry!我一时疏忽!忘了重要的一点,看下面这段SQL帮助:
Global temporary tables are automatically dropped when the session that
created the table ends and all other tasks have stopped referencing them.
当创建该临时表的对话中止时就已经自动删除了,看来这条路走不通。如果你使用MIDAS
那就比较好办,在程序中可以获得连接到AppServer上的连接数.
 
试一下下面的方法,应该可以:

/* 取得指定数据库的连接数 */
declare @dbname varchar(20) /* 数据库名称 */
declare @links int /* 连接数 */
select @links =(select
count(*)
from
master.dbo.sysprocesses
where
dbid=(select dbid from master.dbo.sysdatabases where name=@dbname))

print '当前连接数:'+convert(varchar(10), @links)


/* 查看当前连接到数据库上的所有客户机及其所连接的数据库 */
select
spid,
dbid,
(select
name
from
master.dbo.sysdatabases
where
master.dbo.sysdatabases.dbid=master.dbo.sysprocesses.dbid
)as dbname,
hostname
from
master.dbo.sysprocesses
where
dbid<>0

呵呵!多看看SQL的帮助还是很有好处的!
 
sp_who和select * from master.dbo.sysprocesses
统计的是连接数,活动的和非活动的,
select * from master.dbo.sysprocesses where status="runable"
 
多人接受答案了。
 
后退
顶部