wake-up-neo.com

Gibt es eine Möglichkeit, eine Liste aller aktuellen temporären Tabellen in SQL Server abzurufen?

Mir ist klar, dass temporäre Tabellen sitzungs-/verbindungsgebunden sind und außerhalb der Sitzung/Verbindung weder sichtbar noch zugänglich sind.

Ich habe eine lange laufende gespeicherte Prozedur, die temporäre Tabellen in verschiedenen Phasen erstellt.

Gibt es eine Möglichkeit, die Liste der aktuellen temporären Tabellen anzuzeigen? Welche Rechte brauche ich, um das zu können?

Alternative,

Gibt es eine Möglichkeit, die bestimmte SQL-Anweisung zu sehen, die in einer laufenden gespeicherten Prozedur ausgeführt wird? Die Prozedur wird als geplanter Auftrag in SQL Server ausgeführt.

Ich verwende SQL Server 2000.

Vielen Dank für Ihre Beratung.

59
AAsk

Ist es das was du suchst?

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

select * from tempdb.sys.objects
--for sql-server 2005 and later versions
93
Sandro

Sie können die Liste der temporären Tabellen mit folgender Abfrage abrufen:

select left(name, charindex('_',name)-1) 
from tempdb..sysobjects
where charindex('_',name) > 0 and
xtype = 'u' and not object_id('tempdb..'+name) is null
8
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

sie können die ## -Zeile entfernen, wenn Sie globale temporäre Tabellen einschließen möchten.

2
FLICKER

Für SQL Server 2000 sollte dies nur die # temporären Tabellen in Ihrer Sitzung anzeigen. (Angepasst von mein Beispiel für modernere Versionen von SQL Server hier .) Dies setzt voraus, dass Sie Ihre Tabellen nicht mit drei aufeinander folgenden Unterstrichen wie CREATE TABLE #foo___bar Benennen:

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
Aaron Bertrand

Wenn Sie die Liste der temporären Tabellen anzeigen möchten, können Sie einfach die verwendeten Namen protokollieren. (und wie andere angemerkt haben, ist es möglich, diese Informationen direkt abzufragen)

Wenn Sie den Inhalt temporärer Tabellen anzeigen möchten, müssen Sie echte Tabellen mit einem (eindeutigen) temporären Namen erstellen.

Sie können das ausgeführte SQL mit SQL Profiler verfolgen:

[Diese Artikel richten sich an SQL Server-Versionen nach 2000, aber ein Großteil der Ratschläge ist gleich.]

Wenn Sie einen langwierigen Prozess haben, der für Ihr Unternehmen wichtig ist, ist es eine gute Idee, verschiedene Schritte (Schrittname/-nummer, Start- und Endzeit) im Prozess zu protokollieren. Auf diese Weise haben Sie eine Basislinie, mit der Sie vergleichen können, wenn die Leistung nicht gut ist, und Sie können schneller feststellen, welche Schritte das Problem verursachen.

2
Mitch Wheat