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.
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
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
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));
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.
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.