我意识到临时表是与会话/连接绑定的,不能在会话/连接之外被看到或访问。
我有一个长时间运行的存储过程,在各个阶段创建临时表。
有没有办法查看当前临时表的列表?我需要哪些权限才能这样做?
或者,
有没有办法在运行的存储过程中查看正在执行的特定SQL语句?该过程作为SQL Server中的计划作业运行。
我正在使用SQL Server 2000.
感谢您的指导。
我意识到临时表是与会话/连接绑定的,不能在会话/连接之外被看到或访问。
我有一个长时间运行的存储过程,在各个阶段创建临时表。
有没有办法查看当前临时表的列表?我需要哪些权限才能这样做?
或者,
有没有办法在运行的存储过程中查看正在执行的特定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
and object_id(...) 不为空
。 - Aaron BertrandSELECT 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));