Je réalise que les tables temporaires sont liées à la session/connexion et non visibles ou accessibles hors de la session/connexion.
J'ai une longue procédure stockée qui crée des tables temporaires à différentes étapes.
Existe-t-il un moyen de voir la liste des tables temporaires actuelles? De quels privilèges ai-je besoin pour pouvoir le faire?
Alternativement
Existe-t-il un moyen de voir l’instruction SQL particulière en cours d’exécution dans une procédure stockée en cours? La procédure s'exécute en tant que travail planifié dans SQL Server.
J'utilise SQL Server 2000.
Merci pour vos conseils.
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
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 la ligne ## si vous souhaitez inclure des tables temporaires globales.
Pour SQL Server 2000, cela devrait vous indiquer uniquement les tables #temp de votre session. (Adapté de mon exemple pour les versions plus modernes de SQL Server ici .) Cela suppose que vous ne nommez pas vos tables avec trois caractères 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 enregistrer les noms utilisés. (et comme d'autres l'ont noté, il est possible d'interroger directement cette information)
Si vous devez "voir" le contenu des tables temporaires, vous devrez créer de vraies tables avec un nom temporaire (unique).
Vous pouvez suivre le SQL en cours d'exécution à l'aide de SQL Profiler:
[Ces articles visent les versions de SQL Server ultérieures à 2000, mais la plupart des conseils sont les mêmes.]
Si votre processus est long et important pour votre entreprise, il est judicieux de consigner diverses étapes (nom/numéro d'étape, heure de début et de fin) dans le processus. De cette façon, vous disposez d’une base de référence à comparer lorsque les choses ne fonctionnent pas bien, et vous pouvez identifier plus rapidement la ou les étapes à l’origine du problème.