Beim MS-SQL-Server hat man die Möglichkeit temporäre Tabellen anzulegen. Diese temporären (lokal und global) Tabellen werden in der tempDB im Schema dbo erstellt und verwaltet.

Dabei unterscheidet man drei Arten von temporären Tabellen:

  • lokale temporäre Tabelle (#Tabellename)
  • globale temporäre Tabelle (##Tabellename)
  • Tabellenvariablen

Die Geltungsbereiche sind hier unterschiedlich:

  • Lokale temporär Tabellen sind nur innerhalb dieser Sitzung (Session) gültig die Tabelle erstellt hat. Die Tabelle wird nach beenden der Sitzung (Session) automatisch gelöscht.
  • Globale Temporär Tabellen sind in allen Sitzungen (Sessions) gültig und werden nach beenden der erstellenden Sitzung wieder gelöscht.
  • Tabellenvariablen sind nur innerhalb der Batch gültig und verfügbar.

lokale temporäre Tabellen:

-- lokale temporäre Tabellen
CREATE TABLE #lokale_Tabelle
(
Spalte1 int
, Spalte2 nvarchar(50)
, Spalte3 geography
)

Bei den lokalen temporär Tabellen können je Sitzung (Session) die gleichen Aliase (Bezeichnungen) vergeben werden.

globale temporäre Tabellen:

-- globale temporäre Tabellen
CREATE TABLE ##globale_Tabelle
(
Spalte1 int
, Spalte2 nvarchar(50)
, Spalte3 geography
)

Die Aliase (Bezeichnungen) bei den globalen temporär Tabellen gibt es nur einmal auf dieser Instanz des MS-SQL-Servers.

Tabellenvariable:

-- Tabellenvariable
DECLARE @Tabellenvariable TABLE
(
    Id      int             NOT NULL    IDENTITY PRIMARY KEY CLUSTERED,
    Name    Varchar(100)    NOT NULL    ,
    Stadt   Varchar(100)    NOT NULL    )
)

Der Vorteil der Tabellenvariablen liegt darin, dass Tabellenvariable weniger Ressourcen verbrauchen / benötigen. Nach Beendigung des Scriptes sind die Tabellenvariable nicht mehr verfügbar und werden erst wieder zur Laufzeit erstellt.

Allgemein:

Die Handhabung dieser drei Tabellen ist identisch mit “richtigen” Tabellen. Es können Primär-Schlüssel, Indizes usw. erstellt werden. Eine Erstellung von temporären Tabellen mit Fremdschlüsselbeziehungen sind jedoch nicht möglich.

Es ist eine persönliche Entscheidung mit welchen dieser drei Tabellen-Arten man entwickeln möchte. Ein Patentrezept gibt es nicht welche Arbeiten in lokalen temporären Tabellen, globalen temporären Tabellen oder in Tabellenvariable erledigt werden sollten.

Von Michael