Temporäre Tabellen sind in den meisten Merkmalen wie gewöhnliche Tabellen, außer dass sie in TempDB statt in die aktuelle Datenbank gehen und nach begrenztem Umfang verschwinden (abhängig davon, ob es sich um sitzungsbasierte oder globale temporäre Tabellen handelt. Aber alle Änderungen an Daten in temporären Tabellen sind im Transaktionsprotokoll protokolliert, mit allen damit verbundenen Auswirkungen auf die Leistung. otoh, Sie können einer temporären Tabelle auch so viele Indizes oder Ansichten oder Trigger oder was auch immer Sie möchten hinzufügen, genau wie Sie es zu einer gewöhnlichen Tabelle tun würden.
Tabellenvariablen sind eine Art Abkürzungstabelle im Speicher (sie verwenden auch temporäre DB). Änderungen an ihnen werden nicht protokolliert (dies verbessert die Leistung). Aber Sie können nur einen Index darauf erhalten (da Indizes nicht nach der anfänglichen Deklarationsanweisung erstellt werden können, ist der einzige Index, den Sie für eine Tabellenvariable erstellen können, derjenige, der in die anfängliche Tabellenvariablendeklaration aufgenommen werden kann ...
Declare @Tab Table (myKey integer Primary Key Not Null, data varchar(20))
Aufgrund dieser Eigenschaften sind temporäre Tabellen die bessere Wahl für große Tabellen (breit und mit vielen Zeilen) und/oder die während ihrer Lebensdauer mehr als einem Zugriffsmuster unterliegen, während Tabellenvariablen am besten geeignet sind, wenn Sie eine sehr schmale Tabelle benötigen ( Nur-Schlüssel-Tabelle oder Schlüssel mit nur einer Datenspalte), auf die immer von diesem indizierten Schlüssel zugegriffen wird ...