sql >> Databasteknik >  >> RDS >> Sqlserver

Introduktion till temporära tabeller i SQL Server

I SQL Server, en tillfällig tabell är en viss typ av tabell som existerar tills den går utanför räckvidden (såvida den inte uttryckligen har tagits bort).

Detta skiljer sig från en vanlig (beständig) tabell, där den vanliga tabellen finns permanent i din databas tills du uttryckligen släpper den.

Fördelar med tillfälliga tabeller

Tillfälliga tabeller kan vara användbara vid tillfällen då du behöver köra flera frågor mot en delmängd av en större resultatuppsättning. Du kan använda SELECT... INTO med en WHERE klausul för att placera delmängden av data i en temporär tabell. Du kan sedan köra frågor mot den tillfälliga tabellen. Detta sparar dig från att ständigt behöva filtrera data från den större resultatuppsättningen när du gör flera frågor.

Tillfälliga tabeller kan också vara användbara ur ett behörighetsperspektiv. Om du behöver arbeta med data från en beständig tabell men du inte har tillräckliga behörigheter för att utföra alla operationer du behöver, kan du kopiera dessa data till en temporär tabell (förutsatt att du har läsbehörighet) och göra vad du än behöver göra .

Tillfälliga tabeller kan också användas om du inte har behörighet att skapa en (beständig) tabell i den aktuella databasen.

En annan praktisk aspekt av temporära tabeller är att du kan använda dem för att köra snabba ad-hoc-frågor när du kör ett test, demonstrerar ett koncept, etc, utan att behöva oroa dig för att lämna ett spår av beständiga tabeller som du har glömt att släppa.

TempDB

Tillfälliga tabeller skapas i TempDB databas. Detta är en systemdatabas som lagrar tillfälliga användarobjekt såsom temporära tabeller och index, temporärt lagrade procedurer, tabellvariabler, tabeller som returneras i tabellvärdade funktioner och markörer. Den lagrar även interna objekt som skapats av databasmotorn och versionslagringar.

Alla användare kan skapa tillfälliga tabeller i TempDB . Du behöver inte konfigurera några speciella behörigheter för TempDB åtkomst.

Syntax

Tillfälliga tabeller skapas med samma syntax som vanliga tabeller. Skillnaden är att temporära tabeller har prefixet antingen ett eller två siffertecken (# ):

  • Lokala temporära tabeller har prefixet med ett enda nummertecken (t.ex. #table_name )
  • Globala temporära tabeller har ett dubbelt siffertecken prefix (t.ex. ##table_name )

Exempel på att skapa en lokal tillfällig tabell:

CREATE TABLE #LocalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Exempel på att skapa en global tillfällig tabell:

CREATE TABLE ##GlobalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Lokala temporära tabeller är endast synliga i den aktuella sessionen och globala temporära tabeller är synliga för alla sessioner.

Hur länge håller ett tillfälligt bord?

Tillfälliga tabeller tas bort automatiskt när de går utanför räckvidden.

Du kan också uttryckligen släppa en tillfällig tabell genom att använda DROP TABLE .

Exakt när en temporär tabell släpps automatiskt beror på om den temporära tabellen är lokal eller global, och om den har skapats i en lagrad procedur eller inte.

  • Lokalt :En lokal temporär tabell skapad i en lagrad procedur tas bort automatiskt när den lagrade proceduren är klar. Tabellen kan refereras av alla kapslade lagrade procedurer som exekveras av den lagrade proceduren som skapade tabellen. Tabellen kan inte refereras av den process som anropade den lagrade proceduren som skapade tabellen.

    Alla andra lokala temporära tabeller tas bort automatiskt i slutet av den aktuella sessionen.

  • Global :Globala temporära tabeller tas bort automatiskt när sessionen som skapade tabellen slutar och alla andra uppgifter har slutat referera till dem. Sambandet mellan en uppgift och en tabell bibehålls endast under hela livet av en enskild T-SQL-sats. Detta innebär att en global temporär tabell tas bort vid slutförandet av den senaste T-SQL-satsen som aktivt refererade till tabellen när skapandesessionen avslutades.

Schema

Alla temporära tabeller skapas i dbo schema. Om du uttryckligen anger ett annat schema ignoreras det.

Främmande nycklar

FOREIGN KEY-begränsningar tillämpas inte på temporära tabeller. Om du anger en främmande nyckel skapas tabellen fortfarande, bara utan en främmande nyckel. Ett meddelande kommer att returneras som informerar dig om detta.


  1. Dapper.NET och lagrad proc med flera resultatuppsättningar

  2. C#:Skicka en användardefinierad typ till en lagrad Oracle-procedur

  3. Hur POW() fungerar i MariaDB

  4. Hur man definierar en primärnyckel för automatisk ökning i PostgreSQL