Existe-t-il un moyen d'obtenir une liste de toutes les tables temporaires actuelles dans SQL Server?

Je me rends compte que les tables temporaires sont liées à la session/connexion et non visibles ou accessibles hors de la session / connexion.

J'ai une procédure stockée longue qui crée des tables temporaires à différentes étapes.

Y a-t-il un moyen de voir la liste des tables temporaires actuelles? De quels privilèges ai-je besoin pour pouvoir le faire?

Sinon,

Existe-t-il un moyen de voir l'instruction SQL particulière exécutée dans une procédure stockée en cours d'exécution? Le la procédure s'exécute en tant que tâche planifiée dans SQL Server.

J'utilise SQL Server 2000.

Merci pour vos conseils.

48
demandé sur marc_s 2011-08-16 12:29:18

5 réponses

Est-ce ce que vous recherchez?

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

select * from tempdb.sys.objects
--for sql-server 2005 and later versions
78
répondu Sandro 2017-03-20 13:29:21

Vous pouvez obtenir la liste des tables temporaires en suivant la requête:

select left(name, charindex('_',name)-1) 
from tempdb..sysobjects
where charindex('_',name) > 0 and
xtype = 'u' and not object_id('tempdb..'+name) is null
7
répondu Upendra Chaudhari 2013-01-10 05:54:46

Pour SQL Server 2000, cela ne devrait vous indiquer que les tables # temp de votre session. (Adapté de mon exemple pour des versions plus modernes de SQL Server ici .) Cela suppose que vous ne nommez pas vos tables avec trois traits de soulignement consécutifs, comme 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));
2
répondu Aaron Bertrand 2017-05-23 12:02:35

Si vous avez besoin de "voir" la liste des tables temporaires, vous pouvez simplement connecter les noms utilisés. (et comme d'autres l'ont noté, il est possible d'interroger directement cette information)

Si vous avez besoin de "voir" le contenu des tables temporaires, vous devrez créer des tables réelles avec un nom temporaire (unique).

Vous pouvez tracer le SQL en cours d'exécution en utilisant SQL Profiler:

[ces articles ciblent les versions de SQL Server supérieures à 2000, mais une grande partie des conseils sont les mêmes.]

Si vous avez un processus long qui est important pour votre entreprise, c'est une bonne idée de consigner diverses étapes (nom/numéro de l'étape, Heure de début et de fin) dans le processus. De cette façon, vous avez une ligne de base à comparer lorsque les choses ne fonctionnent pas bien, et vous pouvez identifier les étapes qui causent le problème plus rapidement.

2
répondu Mitch Wheat 2014-02-09 07:40:47
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

, Vous pouvez supprimer le ## si vous souhaitez inclure des tables temporaires globales.

2
répondu FLICKER 2015-09-23 18:43:58