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

Erstellen Sie eine temporäre Tabelle in SQL Server

In SQL Server werden temporäre Tabellen mit demselben CREATE TABLE erstellt Syntax als reguläre Tabellen. Der Unterschied besteht darin, dass den Namen temporärer Tabellen entweder ein oder zwei Nummernzeichen vorangestellt werden (# ), je nachdem, ob es sich um eine lokale temporäre Tabelle oder eine globale temporäre Tabelle handelt:

  • Lokale temporäre Tabellen wird ein einzelnes Nummernzeichen vorangestellt (# )
  • Globale temporäre Tabellen wird ein doppeltes Nummernzeichen vorangestellt (## )

Beispiel 1 – Erstellen Sie eine lokale temporäre Tabelle

Hier ist ein Beispiel für das Erstellen einer lokalen temporären Tabelle:

CREATE TABLE #Cats (CatId int PRIMARY KEY, CatName varchar(70));

Der Name, den Sie für eine lokale temporäre Tabelle angeben, darf maximal 116 Zeichen lang sein. Andere Tabellentypen können 128 Zeichen lang sein, aber lokale temporäre Tabellen werden automatisch mit einem vom System generierten numerischen Suffix angehängt.

Beispiel 2 – Erstellen Sie eine globale temporäre Tabelle

Hier ist ein Beispiel für das Erstellen einer globalen temporären Tabelle:

CREATE TABLE ##Cats (CatId int PRIMARY KEY, CatName varchar(70));

Globale temporäre Tabellennamen dürfen maximal 128 Zeichen lang sein. SQL Server hängt kein vom System generiertes numerisches Suffix an globale temporäre Tabellen an, wie dies bei lokalen temporären Tabellen der Fall ist, sodass Sie den gesamten Speicherplatz nutzen können.

Beispiel 3 – Zeigen Sie die temporären Tabellen an

Ich kann die folgende Abfrage ausführen, um meine neu erstellten temporären Tabellen anzuzeigen.

SELECT nameFROM tempdb.sys.tablesWHERE name LIKE '#Cats%'OR name ='##Cats';

Ergebnis:

+---------------------------------------------- -------------------------------------------------- ---------------------------------+| Name ||------------------------------------------------------------- -------------------------------------------------- ---------------------------------|| ##Katzen || #Katzen________________________________________________________________________________________________________________000000000018 |+---------------------------------------------- -------------------------------------------------- ---------------------------------+

Wir können sehen, dass an die lokale temporäre Tabelle das vom System generierte numerische Suffix angehängt wurde, und deshalb verwendet meine Abfrage den LIKE Operator für diese Tabelle.

Beispiel 4 – Neue Sitzung

Wenn ich eine neue Sitzung öffne, eine lokale temporäre Tabelle mit demselben Namen (Cats) erstelle und dann diese Abfrage erneut ausführe, erhalte ich Folgendes:

+---------------------------------------------- -------------------------------------------------- ---------------------------------+| Name ||------------------------------------------------------------- -------------------------------------------------- ---------------------------------|| ##Katzen || #Katzen________________________________________________________________________________________________________________000000000018 || #Katzen________________________________________________________________________________________________________________000000000019 |+---------------------------------------------- -------------------------------------------------- ---------------------------------+

Mehrere Sitzungen können also eine lokale Tabelle mit demselben Namen erstellen, da SQL Server diesen Namen ändert, indem er das Suffix erhöht.

Beispiel 5 – Dieselbe Sitzung

Wenn ich jedoch versuche, die lokale temporäre Tabelle erneut in derselben zu erstellen Sitzung erhalte ich Folgendes:

Msg 2714, Level 16, State 6, Line 1There ist bereits ein Objekt namens „#Cats“ in der Datenbank.

Und wenn ich noch eine weitere Sitzung öffne, bin ich erfolgreich, und wenn ich tempdb.sys.tables abfrage Ich verstehe:

+---------------------------------------------- -------------------------------------------------- ---------------------------------+| Name ||------------------------------------------------------------- -------------------------------------------------- ---------------------------------|| ##Katzen || #Katzen________________________________________________________________________________________________________________000000000018 || #Katzen________________________________________________________________________________________________________________000000000019 || #Katzen________________________________________________________________________________________________________________00000000001B |+---------------------------------------------- -------------------------------------------------- ---------------------------------+