stored - ¿Hay alguna forma de obtener una lista de todas las tablas temporales actuales en SQL Server?
tabla temporal sql server stored procedure (5)
¿Es esto lo que buscas?
select * from tempdb..sysobjects
--for sql-server 2000 and later versions
select * from tempdb.sys.objects
--for sql-server 2005 and later versions
Me doy cuenta de que las tablas temporales son vinculadas a la sesión / conexión y no son visibles o accesibles desde la sesión / conexión.
Tengo un procedimiento almacenado de larga ejecución que crea tablas temporales en varias etapas.
¿Hay alguna manera de ver la lista de tablas temporales actuales? ¿Qué privilegios necesito para poder hacerlo?
Alternativamente,
¿Hay alguna manera de ver la declaración SQL particular que se está ejecutando dentro de un procedimiento almacenado en ejecución? El procedimiento se está ejecutando como un trabajo programado en SQL Server.
Estoy usando SQL Server 2000.
Gracias por su guía.
Para SQL Server 2000, esto debería decirle solo las tablas #temp en su sesión. (Adaptado de mi ejemplo para versiones más modernas de SQL Server aquí .) Esto asume que no nombra sus tablas con tres guiones bajos consecutivos, como 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));
Puede obtener una lista de tablas temporales siguiendo la siguiente consulta:
select left(name, charindex(''_'',name)-1)
from tempdb..sysobjects
where charindex(''_'',name) > 0 and
xtype = ''u'' and not object_id(''tempdb..''+name) is null
Si necesita ''ver'' la lista de tablas temporales, simplemente puede registrar los nombres utilizados. (y como otros han notado, es posible consultar directamente esta información)
Si necesita ''ver'' el contenido de las tablas temporales, deberá crear tablas reales con un nombre temporal (único).
Puede rastrear el SQL que se está ejecutando utilizando el Analizador de SQL:
[Estos artículos se dirigen a las versiones de SQL Server posteriores a 2000, pero gran parte del consejo es el mismo.]
Si tiene un proceso largo que es importante para su negocio, es una buena idea registrar varios pasos (nombre / número de paso, hora de inicio y finalización) en el proceso. De esta forma, tiene una línea de base para comparar cuando las cosas no funcionan bien, y puede identificar qué pasos están causando el problema más rápidamente.
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
puede eliminar la línea ## si desea incluir tablas temporales globales.