Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Einführung in temporäre Tabellen in SQL Server

In SQL Server eine temporäre Tabelle ist eine bestimmte Art von Tabelle, die existiert, bis sie den Gültigkeitsbereich verlässt (es sei denn, sie wird explizit gelöscht).

Dies unterscheidet sich von einer regulären (persistenten) Tabelle, bei der die reguläre Tabelle dauerhaft in Ihrer Datenbank vorhanden ist, bis Sie sie explizit löschen.

Vorteile temporärer Tabellen

Temporäre Tabellen können manchmal nützlich sein, wenn Sie mehrere Abfragen für eine Teilmenge einer größeren Ergebnismenge ausführen müssen. Sie können SELECT... INTO verwenden mit einem WHERE -Klausel, um die Teilmenge der Daten in eine temporäre Tabelle zu schreiben. Sie können dann Abfragen für diese temporäre Tabelle ausführen. Dies erspart Ihnen das ständige Filtern von Daten aus der größeren Ergebnismenge, wenn Sie mehrere Abfragen durchführen.

Temporäre Tabellen können auch aus Sicht der Berechtigungen nützlich sein. Wenn Sie mit Daten aus einer persistenten Tabelle arbeiten müssen, aber nicht über ausreichende Berechtigungen verfügen, um alle erforderlichen Vorgänge auszuführen, können Sie diese Daten in eine temporäre Tabelle kopieren (vorausgesetzt, Sie haben Lesezugriff) und tun, was immer Sie tun müssen .

Temporäre Tabellen können auch verwendet werden, wenn Sie keine Berechtigung zum Erstellen einer (persistenten) Tabelle in der aktuellen Datenbank haben.

Ein weiterer praktischer Aspekt temporärer Tabellen ist, dass Sie sie für schnelle Ad-hoc-Abfragen verwenden können, wenn Sie einen Test durchführen, ein Konzept demonstrieren usw., ohne sich Gedanken darüber machen zu müssen, dass Sie eine Spur persistenter Tabellen hinterlassen, die Sie vergessen haben zu löschen.

TempDB

Temporäre Tabellen werden in der TempDB erstellt Datenbank. Dies ist eine Systemdatenbank, die temporäre Benutzerobjekte wie temporäre Tabellen und Indizes, temporäre gespeicherte Prozeduren, Tabellenvariablen, in Tabellenwertfunktionen zurückgegebene Tabellen und Cursor speichert. Es speichert auch interne Objekte, die von der Datenbank-Engine erstellt wurden, und Versionsspeicher.

Jeder Benutzer kann temporäre Tabellen in TempDB erstellen . Sie müssen keine besonderen Berechtigungen für TempDB konfigurieren Zugriff.

Syntax

Temporäre Tabellen werden mit derselben Syntax wie reguläre Tabellen erstellt. Der Unterschied besteht darin, dass temporären Tabellen entweder ein oder zwei Nummernzeichen vorangestellt werden (# ):

  • Lokalen temporären Tabellen wird ein einzelnes Nummernzeichen vorangestellt (z. B. #table_name )
  • Globalen temporären Tabellen wird ein doppeltes Nummernzeichen vorangestellt (zB ##table_name )

Beispiel für die Erstellung eines lokalen temporäre Tabelle:

CREATE TABLE #LocalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Beispiel für die Erstellung einer globalen temporäre Tabelle:

CREATE TABLE ##GlobalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Lokale temporäre Tabellen sind nur in der aktuellen Sitzung sichtbar, und globale temporäre Tabellen sind für alle Sitzungen sichtbar.

Wie lange hält ein temporärer Tisch?

Temporäre Tabellen werden automatisch gelöscht, wenn sie den Geltungsbereich verlassen.

Sie können eine temporäre Tabelle auch explizit löschen, indem Sie DROP TABLE verwenden .

Wann genau eine temporäre Tabelle automatisch gelöscht wird, hängt davon ab, ob die temporäre Tabelle lokal oder global ist und ob sie in einer gespeicherten Prozedur erstellt wurde oder nicht.

  • Lokal Hinweis:Eine in einer gespeicherten Prozedur erstellte lokale temporäre Tabelle wird automatisch gelöscht, wenn die gespeicherte Prozedur beendet ist. Auf die Tabelle kann von allen verschachtelten gespeicherten Prozeduren verwiesen werden, die von der gespeicherten Prozedur ausgeführt werden, die die Tabelle erstellt hat. Auf die Tabelle kann nicht von dem Prozess verwiesen werden, der die gespeicherte Prozedur aufgerufen hat, die die Tabelle erstellt hat.

    Alle anderen lokalen temporären Tabellen werden am Ende der aktuellen Sitzung automatisch gelöscht.

  • Weltweit :Globale temporäre Tabellen werden automatisch gelöscht, wenn die Sitzung, die die Tabelle erstellt hat, endet und alle anderen Tasks aufgehört haben, auf sie zu verweisen. Die Zuordnung zwischen einer Aufgabe und einer Tabelle wird nur für die Lebensdauer einer einzelnen T-SQL-Anweisung aufrechterhalten. Dies bedeutet, dass eine globale temporäre Tabelle nach Abschluss der letzten T-SQL-Anweisung gelöscht wird, die aktiv auf die Tabelle verwiesen hat, als die Erstellungssitzung beendet wurde.

Schema

Alle temporären Tabellen werden im dbo erstellt Schema. Wenn Sie explizit ein anderes Schema angeben, wird es ignoriert.

Fremdschlüssel

FOREIGN KEY-Einschränkungen werden für temporäre Tabellen nicht erzwungen. Wenn Sie einen Fremdschlüssel angeben, wird die Tabelle trotzdem erstellt, nur ohne Fremdschlüssel. Es wird eine Nachricht zurückgesendet, die Sie darauf hinweist.