In SQL Server, een tijdelijke tabel is een bepaald soort tabel die bestaat totdat deze buiten het bereik valt (tenzij deze expliciet wordt verwijderd).
Dit is anders dan een gewone (permanente) tabel, waar de gewone tabel permanent in uw database bestaat totdat u deze expliciet laat vallen.
Voordelen van tijdelijke tabellen
Tijdelijke tabellen kunnen handig zijn wanneer u meerdere query's moet uitvoeren op een subset van een grotere resultatenset. U kunt SELECT... INTO
. gebruiken met een WHERE
clausule om de subset van gegevens in een tijdelijke tabel te plaatsen. U kunt vervolgens query's uitvoeren op die tijdelijke tabel. Hierdoor hoeft u niet voortdurend gegevens uit de grotere resultatenset te filteren wanneer u meerdere zoekopdrachten uitvoert.
Tijdelijke tabellen kunnen ook handig zijn vanuit het perspectief van machtigingen. Als u met gegevens uit een permanente tabel moet werken, maar u niet over voldoende machtigingen beschikt om alle benodigde bewerkingen uit te voeren, kunt u die gegevens naar een tijdelijke tabel kopiëren (ervan uitgaande dat u leestoegang hebt) en doen wat u moet doen .
Tijdelijke tabellen kunnen ook worden gebruikt als u geen toestemming heeft om een (permanente) tabel in de huidige database aan te maken.
Een ander handig aspect van tijdelijke tabellen is dat u ze kunt gebruiken voor het uitvoeren van snelle ad-hocquery's bij het uitvoeren van een test, het demonstreren van een concept, enz., zonder dat u zich zorgen hoeft te maken over het achterlaten van een spoor van hardnekkige tabellen die u bent vergeten te laten vallen.
TempDB
Tijdelijke tabellen worden aangemaakt in de TempDB databank. Dit is een systeemdatabase waarin tijdelijke gebruikersobjecten zijn opgeslagen, zoals tijdelijke tabellen en indexen, tijdelijk opgeslagen procedures, tabelvariabelen, tabellen die worden geretourneerd in tabelwaardige functies en cursors. Het slaat ook interne objecten op die door de database-engine zijn gemaakt, en versie-archieven.
Elke gebruiker kan tijdelijke tabellen maken in TempDB . U hoeft geen speciale machtigingen te configureren voor TempDB toegang.
Syntaxis
Tijdelijke tabellen worden gemaakt met dezelfde syntaxis als gewone tabellen. Het verschil is dat tijdelijke tabellen worden voorafgegaan door een of twee nummertekens (#
):
- Lokale tijdelijke tabellen worden voorafgegaan door een enkel hekje (bijv.
#table_name
) - Globale tijdelijke tabellen worden voorafgegaan door een dubbel hekje (bijv.
##table_name
)
Voorbeeld van het maken van een lokaal tijdelijke tafel:
CREATE TABLE #LocalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Voorbeeld van het maken van een algemeen tijdelijke tafel:
CREATE TABLE ##GlobalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Lokale tijdelijke tabellen zijn alleen zichtbaar in de huidige sessie en globale tijdelijke tabellen zijn zichtbaar voor alle sessies.
Hoe lang duurt een tijdelijke tafel?
Tijdelijke tabellen worden automatisch verwijderd wanneer ze buiten het bereik vallen.
U kunt een tijdelijke tabel ook expliciet verwijderen met DROP TABLE
.
Wanneer een tijdelijke tabel automatisch wordt verwijderd, hangt af van of de tijdelijke tabel lokaal of globaal is en of deze in een opgeslagen procedure is gemaakt.
- Lokaal :een lokale tijdelijke tabel die in een opgeslagen procedure is gemaakt, wordt automatisch verwijderd wanneer de opgeslagen procedure is voltooid. Er kan naar de tabel worden verwezen door alle geneste opgeslagen procedures die worden uitgevoerd door de opgeslagen procedure waarmee de tabel is gemaakt. Er kan niet naar de tabel worden verwezen door het proces dat de opgeslagen procedure heeft aangeroepen waarmee de tabel is gemaakt.
Alle andere lokale tijdelijke tafels worden automatisch verwijderd aan het einde van de huidige sessie.
- Wereldwijd :Globale tijdelijke tabellen worden automatisch verwijderd wanneer de sessie die de tabel heeft gemaakt eindigt en alle andere taken er niet meer naar verwijzen. De koppeling tussen een taak en een tabel wordt alleen gehandhaafd voor de duur van een enkele T-SQL-instructie. Dit betekent dat een globale tijdelijke tabel wordt verwijderd na voltooiing van de laatste T-SQL-instructie die actief naar de tabel verwees toen de aanmaaksessie eindigde.
Schema
Alle tijdelijke tabellen worden aangemaakt in de dbo schema. Als je expliciet een ander schema opgeeft, wordt dit genegeerd.
Buitenlandse sleutels
FOREIGN KEY-beperkingen worden niet afgedwongen op tijdelijke tabellen. Als u een externe sleutel opgeeft, wordt de tabel nog steeds gemaakt, alleen zonder een externe sleutel. U krijgt hiervan een bericht terug.