In SQL Server worden tijdelijke tabellen gemaakt met dezelfde CREATE TABLE
syntaxis als gewone tabellen. Het verschil is dat de namen van tijdelijke tabellen worden voorafgegaan door een of twee nummertekens (#
), afhankelijk van of het een lokale tijdelijke tabel of een globale tijdelijke tabel is:
- Lokale tijdelijke tabellen worden voorafgegaan door een enkel hekje (
#
) - Globale tijdelijke tabellen worden voorafgegaan door een dubbel hekje (
##
)
Voorbeeld 1 – Maak een Lokale Tijdelijke Tabel
Hier is een voorbeeld van het maken van een lokale tijdelijke tabel:
CREATE TABLE #Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
De naam die u opgeeft voor een lokale tijdelijke tabel mag maximaal 116 tekens lang zijn. Andere tabeltypen kunnen 128 tekens lang zijn, maar lokale tijdelijke tabellen worden automatisch toegevoegd met een door het systeem gegenereerd numeriek achtervoegsel.
Voorbeeld 2 – Maak een globale tijdelijke tabel
Hier is een voorbeeld van het maken van een globale tijdelijke tabel:
CREATE TABLE ##Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
Globale tijdelijke tabelnamen mogen maximaal 128 tekens lang zijn. SQL Server voegt geen door het systeem gegenereerd numeriek achtervoegsel toe aan globale tijdelijke tabellen zoals bij lokale tijdelijke tabellen, dus u kunt de volledige ruimte gebruiken.
Voorbeeld 3 – Bekijk de tijdelijke tabellen
Ik kan de volgende query uitvoeren om mijn nieuw gemaakte tijdelijke tabellen te zien.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#Cats%' OR name = '##Cats';
Resultaat:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | +----------------------------------------------------------------------------------------------------------------------------------+
We kunnen zien dat aan de lokale tijdelijke tabel het door het systeem gegenereerde numerieke achtervoegsel is toegevoegd, en daarom gebruikt mijn query de LIKE
operator voor die tafel.
Voorbeeld 4 – Nieuwe sessie
Als ik een nieuwe sessie open, een lokale tijdelijke tabel met dezelfde naam (Cats) aanmaak en deze query opnieuw uitvoer, krijg ik dit:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | +----------------------------------------------------------------------------------------------------------------------------------+
Dus meerdere sessies kunnen een lokale tabel met dezelfde naam maken omdat SQL Server die naam wijzigt door het achtervoegsel te verhogen.
Voorbeeld 5 – Dezelfde sessie
Als ik echter probeer om de lokale tijdelijke tabel opnieuw te maken in de dezelfde sessie, krijg ik dit:
Msg 2714, Level 16, State 6, Line 1 There is already an object named '#Cats' in the database.
En als ik weer een sessie open, ben ik succesvol, en wanneer ik tempdb.sys.tables
opvraag Ik krijg dit:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | | #Cats_______________________________________________________________________________________________________________00000000001B | +----------------------------------------------------------------------------------------------------------------------------------+