如何查找SQL Server 2019中指定临时表的创建用户?
查找SQL Server 2019中临时表的创建用户
问题原因
你之前用OBJECTPROPERTYEX(t.OBJECT_ID, 'OwnerId')得到的是tempdb数据库的所有者(通常是sa),而非临时表的实际创建用户——因为临时表在tempdb中的所有权默认继承自tempdb本身,并非创建它的会话用户。
解决方案
要获取临时表的实际创建用户,需要关联临时表的系统信息与会话、连接数据,可执行以下查询:
USE tempdb; SELECT s.session_id, s.login_name AS 创建用户, s.host_name, s.program_name, t.name AS 临时表名 FROM sys.tables t JOIN sys.dm_db_session_space_usage su ON t.object_id = su.object_id JOIN sys.dm_exec_sessions s ON su.session_id = s.session_id WHERE t.name LIKE N'#Test123%';
关键说明
sys.dm_db_session_space_usage:用于关联临时表的对象ID与创建它的会话IDsys.dm_exec_sessions:通过会话ID获取登录名(即临时表创建用户)、主机名、程序名等详细信息
注意事项
- 若创建临时表的会话已关闭,临时表会被SQL Server自动删除,此时无法查询到相关信息
- 临时表在tempdb中的实际名称会被系统追加后缀(例如
#Test123________________00000000004C),因此使用LIKE N'#Test123%'进行匹配是正确的
内容的提问来源于stack exchange,提问作者Ullan
相关产品推荐
相关产品推荐

