sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]
用于筛选结果集。
login 的数据类型为 sysname,它用于标识属于特定登录名的进程。
session ID(在 SQL Server 2000 和更早版本中为 SPID)是属于 SQL Server 实例的会话标识号。session ID 的数据类型为 smallint。
ACTIVE 排除正在等待用户发出下一个命令的会话。
如果没有提供任何值,则过程报告属于实例的所有会话。
0(成功)或 1(失败)
sp_who 返回包含以下信息的结果集。
列 | 数据类型 | 说明 |
---|---|---|
spid | smallint | 会话 ID。 |
ecid | smallint | 与特定会话 ID 相关联的给定线程的执行上下文 ID。 ECID = {0, 1, 2, 3, ...n},其中 0 始终表示主或父线程,并且 {1, 2, 3, ...n} 表示子线程。 |
status | nchar(30) | 进程状态。可能的值有: dormant。SQL Server 正在重置会话。 running。会话正在运行一个或多个批。多个活动的结果集 (MARS) 启用后,会话可以运行多个批。有关详细信息,请参阅Using Multiple Active Result Sets (MARS)。 background。会话正在运行一个后台任务,例如死锁检测。 rollback。会话具有正在处理的事务回滚。 pending。会话正在等待工作线程变为可用。 runnable。会话的任务在等待获取时间量程时位于计划程序的可运行队列中。 spinloop。会话的任务正在等待调节锁变为可用。 suspended。会话正在等待事件(如 I/O)完成。 |
loginame | nchar(128) | 与特定进程相关联的登录名。 |
hostname | nchar(128) | 每个进程的主机或计算机名。 |
blk | char(5) | 如果存在阻塞进程,则是该阻塞进程的会话 ID。否则该列为零。 当与指定会话 ID 相关联的事务受到孤立分布式事务的阻塞时,该列将对阻塞孤立事务返回“-2”。 |
dbname | nchar(128) | 进程使用的数据库。 |
cmd | nchar(16) | 为该进程执行的数据库引擎命令(Transact-SQL 语句、数据库引擎进程等等)。 |
request_id | int | 特定会话中运行的请求的 ID。 |
如果是并行处理,则会为特定的会话 ID 创建子线程。主线程则以 spid = <xxx> 和 ecid =0 表示。其他子线程具有相同的 spid = <xxx>,但 ecid > 0。
阻塞进程(可能含有排他锁)是控制其他进程所需要的资源的进程。
在 SQL Server 2000 和更高版本中,所有孤立分布式事务的会话 ID 都被赋予值“-2”。孤立分布式事务是不与任何会话 ID 关联的分布式事务。有关详细信息,请参阅使用标记的事务(完全恢复模式)。
SQL Server 2000 和更高版本保留从 1 到 50 的会话 ID 值以供内部使用,而 51 或更大的会话 ID 值则表示用户会话。
要求对服务器具有 VIEW SERVER STATE 权限才能查看 SQL Server 实例上所有正在执行的会话。否则,用户只能查看当前会话。
联系客服