SQL Temporäre Tabellen abfragen
Verwendet wird SQL 2005
Hey zusammen,
ich habe eine Frage zu temporären Tabellen!!
Und zwar habe ich eine Stored Procedure welche mir eine Temp. Tabelle erstellt und diese füllt.
Wenn ich nun in einer Query (der gleichen Datenbank) die Stored Procedure ausführe und danach auf Daten der TempTabelle zugreifen möchte bekomme ich den Fehler:
<Invalid object name '#TempTestTabelle'>
Mein Aufruf sieht folgendermaßen aus:
Was muss ich tun, damit ich mit der Temp. Tabelle in anderen Querys arbeiten kann?!?
Danke und Grüße
Fred
Hey zusammen,
ich habe eine Frage zu temporären Tabellen!!
Und zwar habe ich eine Stored Procedure welche mir eine Temp. Tabelle erstellt und diese füllt.
Wenn ich nun in einer Query (der gleichen Datenbank) die Stored Procedure ausführe und danach auf Daten der TempTabelle zugreifen möchte bekomme ich den Fehler:
<Invalid object name '#TempTestTabelle'>
Mein Aufruf sieht folgendermaßen aus:
USE NORTHWIND
EXEC dbo.USP_TempTabelle --Hier wird #TempTestTabelle erzeugt
--nun auf diese Daten zugreifen
SELECT Spalte1, Spalte3 FROM #TempTestTabelle
Was muss ich tun, damit ich mit der Temp. Tabelle in anderen Querys arbeiten kann?!?
Danke und Grüße
Fred
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169884
Url: https://administrator.de/contentid/169884
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
5 Kommentare
Neuester Kommentar
Moin Fred666,
-> also entweder globale TempTables anlegen
-> oder alles (auch deine Queries) in einer erweiterten StP abfackeln.
Grüße
Biber
- eine in einer Stored Procedure angelegte lokale temporäre Tabelle (Präfix "#") ist nur innerhalb der StP inclusive evtl aufgerufener Unter-stored procedures sichtbar.
- eine irgendwo, z.B. in einer Stored Procedure angelegte globale temporäre Tabelle (Präfix "##") ist innerhalb der gesamten Session sichtbar.
-> also entweder globale TempTables anlegen
-> oder alles (auch deine Queries) in einer erweiterten StP abfackeln.
Grüße
Biber
Moin Fred666,
Eventuell hilft es schon, wenn du die Tabellen beim SELECT (also nach dem CREATE und Befüllen durch die StP) mit voll qualifiziertem Namen ansprichst.
Also
Und es muss natürlich in derselben Session sein.
Grüße
Biber
hab ich versucht aber nicht ganz geklappt..
-> Gilt hier nicht im Forum.Eventuell hilft es schon, wenn du die Tabellen beim SELECT (also nach dem CREATE und Befüllen durch die StP) mit voll qualifiziertem Namen ansprichst.
Also
SELECT whatever1, whatever2 FROM tempdb.dbo.##TempTestTabelle
Und es muss natürlich in derselben Session sein.
Grüße
Biber
Moin,
temporäre Tabellen werden gelöscht, sobald die SP, durch die sie angelegt wurde, beendet wird. Ob lokal oder global ist egal, wenn USP_TempTabelle beendet wird, ist die Tabelle weg. Was funktioniert ist, wenn die temporäre Tabelle erst erstellt wird, dann in der Unterprozedur USP_TempTabelle die Tabelle befüllt wird und dann der Inhalt weiterverarbeitet wird. Nicht die schönste Art, aber anders gehts nicht (wenn doch, dann wäre ich auch für eine sinnvolle Alternative dankbar ).
Der Nachteil von globalen Tabellen ist einfach der: Wenn mehrere Benutzer ein Programm bedienen und erst Benutzer A die globale Tabelle anlegt und anschließend Benutzer B dieselbe Prozedur aufruft und auch die Tabelle anlegen will, dann bekommt der einen Fehler. Die temporäre Tabelle von Benutzer A sollte er auch nicht verwenden, weil er ja nicht weiß, wann der die Tabelle wieder löscht.
Bis jetzt habe ich noch keine sinnvolle Verwendung in einem Programm für die globale Tabelle gefunden. Einzig, wenn ich im Query Analyzer was teste und von einer anderen Session aus mal einen Wert abfragen will, dann brauche ich die globalen Tabellen, aber das kommt so gut wie nie vor
Gruß, Mad Max
temporäre Tabellen werden gelöscht, sobald die SP, durch die sie angelegt wurde, beendet wird. Ob lokal oder global ist egal, wenn USP_TempTabelle beendet wird, ist die Tabelle weg. Was funktioniert ist, wenn die temporäre Tabelle erst erstellt wird, dann in der Unterprozedur USP_TempTabelle die Tabelle befüllt wird und dann der Inhalt weiterverarbeitet wird. Nicht die schönste Art, aber anders gehts nicht (wenn doch, dann wäre ich auch für eine sinnvolle Alternative dankbar ).
Der Nachteil von globalen Tabellen ist einfach der: Wenn mehrere Benutzer ein Programm bedienen und erst Benutzer A die globale Tabelle anlegt und anschließend Benutzer B dieselbe Prozedur aufruft und auch die Tabelle anlegen will, dann bekommt der einen Fehler. Die temporäre Tabelle von Benutzer A sollte er auch nicht verwenden, weil er ja nicht weiß, wann der die Tabelle wieder löscht.
Bis jetzt habe ich noch keine sinnvolle Verwendung in einem Programm für die globale Tabelle gefunden. Einzig, wenn ich im Query Analyzer was teste und von einer anderen Session aus mal einen Wert abfragen will, dann brauche ich die globalen Tabellen, aber das kommt so gut wie nie vor
Gruß, Mad Max