Temporäre Tabellen (Temporary Tables) und Tabellenvariablen (Table Variables) sind verschiedene Mechanismen zur Speicherung von Zwischendaten während der Ausführung einer Abfrage oder Prozedur.
Temporäre Tabellen (z. B. #TempTable in MS SQL):
Tabellenvariablen (z. B. @MyTable):
Beispiel:
-- Temporäre Tabelle CREATE TABLE #Temp( Id INT, Name NVARCHAR(100) ); INSERT INTO #Temp VALUES (1, 'Test'); SELECT * FROM #Temp; -- Tabellenvariable DECLARE @MyTable TABLE (Id INT, Name NVARCHAR(100)); INSERT INTO @MyTable VALUES (2, 'Sample'); SELECT * FROM @MyTable;
Was ist der Unterschied in Lebensdauer und Sichtbarkeit zwischen der temporären Tabelle #TempTable und der globalen temporären Tabelle ##GlobalTempTable?
Richtige Antwort:
#TempTable ist nur in der aktuellen Sitzung sichtbar und wird beim Schließen der Verbindung oder bei einem expliziten DROP gelöscht.##GlobalTempTable ist für alle Sitzungen bis zur Schließung der letzten Sitzung, die die Tabelle verwendet hat, oder bei einem expliziten DROP zugänglich. Sie verschwindet erst nach dem Schließen der letzten Verbindung, die sie verwendet hat.-- Globale temporäre Tabelle CREATE TABLE ##GlobalTemp (Id INT);
Geschichte
Im Projekt zur Verarbeitung großer Berichte wurde eine Tabellenvariable für die temporäre Speicherung von Hunderttausenden von Zeilen verwendet. Ergebnis: Dramatischer Rückgang der Leistung, da der Optimierer die Kosten der Abfragen überschätzte und ungeeignete Pläne zu verwenden begann. Der Wechsel zu einer temporären Tabelle in tempdb führte zu einem erheblichen Zeitgewinn.
Geschichte
In einer Prozedur wurde vergessen, die temporäre Tabelle explizit zu löschen. Bei wiederholten Batch-Ausführungen in einer Sitzung traten Fehler auf: "Objekt existiert bereits". Das Problem verschwand nach Hinzufügen eines DROP TABLE vor der Erstellung.
Geschichte
Es wurde eine globale temporäre Tabelle für die interprozessuale Kommunikation von Berichten verwendet. Es wurde nicht berücksichtigt, dass gleichzeitige Ausführungen das Verhalten unberechenbar machten — die Sitzungen konkurrierten um dieselben Daten. Es wurde beschlossen, die globale Tabelle durch individuelle temporäre Tabellen für jede Sitzung zu ersetzen.