是否有一种方法可以获得SQL Server中所有当前临时表的列表



我意识到临时表是会话/连接绑定的,在会话/连接之外不可见或不可访问。

我有一个长时间运行的存储过程,它在各个阶段创建临时表。

是否有一种方法可以看到当前临时表的列表?我需要什么特权才能这样做?

或者

是否有一种方法可以看到正在运行的存储过程中执行的特定SQL语句?该过程在SQL Server中作为计划作业运行。

我使用的是SQL Server 2000.

谢谢你的指导。

这是你想要的吗?

select * from tempdb..sysobjects
--for sql-server 2000 and later versions
select * from tempdb.sys.objects
--for sql-server 2005 and later versions

您可以通过以下查询获得临时表列表:

select left(name, charindex('_',name)-1) 
from tempdb..sysobjects
where charindex('_',name) > 0 and
xtype = 'u' and not object_id('tempdb..'+name) is null
SELECT left(NAME, charindex('_', NAME) - 1)
FROM tempdb..sysobjects
WHERE NAME LIKE '#%'
    AND NAME NOT LIKE '##%'
    AND upper(xtype) = 'U'
    AND NOT object_id('tempdb..' + NAME) IS NULL

如果你想包含全局临时表,可以删除##行

对于SQL Server 2000,这应该只告诉你会话中的#temp表。(此处改编自我的示例,用于更现代版本的SQL Server。)这假定您没有用三个连续的下划线命名您的表,如CREATE TABLE #foo___bar:

SELECT 
  name = SUBSTRING(t.name, 1, CHARINDEX('___', t.name)-1),
  t.id
FROM tempdb..sysobjects AS t
WHERE t.name LIKE '#%[_][_][_]%'
AND t.id = 
  OBJECT_ID('tempdb..' + SUBSTRING(t.name, 1, CHARINDEX('___', t.name)-1));

如果您需要'查看'临时表列表,您可以简单地记录所使用的名称。(正如其他人所指出的,可以直接查询此信息)

如果你需要"看到"临时表的内容,你需要用一个(唯一的)临时名称创建真正的表。

您可以使用SQL Profiler跟踪正在执行的SQL:

  • 使用SQL Server Profiler

  • 如何使用SQL Profiler识别运行缓慢的查询

[这些文章针对2000年以后的SQL Server版本,但大多数建议是相同的。]

如果你有一个对你的业务很重要的冗长流程,那么记录流程中的各个步骤(步骤名称/编号,开始和结束时间)是一个好主意。这样,您就有了一个基线,可以在事情表现不佳时进行比较,并且您可以更快地查明导致问题的步骤。

相关内容

  • 没有找到相关文章

最新更新