I SQL Server, en midlertidig tabel er en bestemt type tabel, der eksisterer, indtil den går uden for scope (medmindre den eksplicit er udeladt).
Dette er anderledes end en almindelig (vedvarende) tabel, hvor den almindelige tabel eksisterer permanent i din database, indtil du udtrykkeligt slipper den.
Fordele ved midlertidige borde
Midlertidige tabeller kan være nyttige på tidspunkter, hvor du har brug for at køre flere forespørgsler mod en delmængde af et større resultatsæt. Du kan bruge SELECT... INTO
med en WHERE
klausul for at indsætte delmængden af data i en midlertidig tabel. Du kan derefter køre forespørgsler mod den midlertidige tabel. Dette sparer dig for konstant at skulle filtrere data fra det større resultatsæt, når du foretager flere forespørgsler.
Midlertidige tabeller kan også være nyttige fra et tilladelsesperspektiv. Hvis du har brug for at arbejde med data fra en vedvarende tabel, men du ikke har tilstrækkelige tilladelser til at udføre alle de handlinger, du har brug for, kan du kopiere disse data til en midlertidig tabel (forudsat at du har læseadgang) og gøre, hvad du skal gøre .
Midlertidige tabeller kan også bruges, hvis du ikke har tilladelse til at oprette en (vedvarende) tabel i den aktuelle database.
Et andet praktisk aspekt ved midlertidige tabeller er, at du kan bruge dem til at køre hurtige ad-hoc-forespørgsler, når du kører en test, demonstrerer et koncept osv. uden at bekymre dig om at efterlade et spor af vedvarende tabeller, som du glemte at slippe.
TempDB
Midlertidige tabeller oprettes i TempDB database. Dette er en systemdatabase, der gemmer midlertidige brugerobjekter såsom midlertidige tabeller og indekser, midlertidige lagrede procedurer, tabelvariabler, tabeller returneret i tabelværdierede funktioner og markører. Den gemmer også interne objekter, der er oprettet af databasemotoren, og versionslagre.
Enhver bruger kan oprette midlertidige tabeller i TempDB . Du behøver ikke at konfigurere nogen særlige tilladelser for TempDB adgang.
Syntaks
Midlertidige tabeller oprettes ved hjælp af samme syntaks som almindelige tabeller. Forskellen er, at midlertidige tabeller er præfikset med enten et eller to taltegn (#
):
- Lokale midlertidige tabeller har et enkelt taltegn foran (f.eks.
#table_name
) - Globale midlertidige tabeller er præfikset med et dobbelt taltegn (f.eks.
##table_name
)
Eksempel på oprettelse af en lokal midlertidig tabel:
CREATE TABLE #LocalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Eksempel på oprettelse af en global midlertidig tabel:
CREATE TABLE ##GlobalTableName ( col1 int PRIMARY KEY, col2 varchar(255) );
Lokale midlertidige tabeller er kun synlige i den aktuelle session, og globale midlertidige tabeller er synlige for alle sessioner.
Hvor længe varer et midlertidigt bord?
Midlertidige tabeller slettes automatisk, når de går uden for rækkevidde.
Du kan også udtrykkeligt droppe en midlertidig tabel ved at bruge DROP TABLE
.
Præcis hvornår en midlertidig tabel slettes automatisk afhænger af, om den midlertidige tabel er lokal eller global, og om den er oprettet i en lagret procedure eller ej.
- Lokal :En lokal midlertidig tabel, der er oprettet i en lagret procedure, slettes automatisk, når den lagrede procedure er afsluttet. Tabellen kan refereres af alle indlejrede lagrede procedurer, der udføres af den lagrede procedure, der skabte tabellen. Tabellen kan ikke refereres af den proces, der kaldte den lagrede procedure, der oprettede tabellen.
Alle andre lokale midlertidige tabeller slettes automatisk i slutningen af den aktuelle session.
- Global :Globale midlertidige tabeller slettes automatisk, når den session, der oprettede tabellen, slutter, og alle andre opgaver er holdt op med at referere til dem. Tilknytningen mellem en opgave og en tabel opretholdes kun i en enkelt T-SQL-sætnings levetid. Dette betyder, at en global midlertidig tabel slettes ved færdiggørelsen af den sidste T-SQL-sætning, der aktivt refererede til tabellen, da oprettelsessessionen sluttede.
Skema
Alle midlertidige tabeller oprettes i dbo skema. Hvis du udtrykkeligt angiver et andet skema, ignoreres det.
Udenlandske nøgler
UDENLANDSKE NØGLE-begrænsninger håndhæves ikke på midlertidige tabeller. Hvis du angiver en fremmednøgle, oprettes tabellen stadig, bare uden en fremmednøgle. Der vil blive returneret en besked om dette.