sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en tillfällig tabell i SQL Server

I SQL Server skapas temporära tabeller med samma CREATE TABLE syntax som vanliga tabeller. Skillnaden är att temporära tabellers namn har prefixet antingen ett eller två siffertecken (# ), beroende på om det är en lokal temporär tabell eller global temporär tabell:

  • Lokala tillfälliga tabeller är prefixerade med ett enda nummertecken (# )
  • Globala tillfälliga tabeller är prefixerade med ett dubbelt siffertecken (## )

Exempel 1 – Skapa en lokal tillfällig tabell

Här är ett exempel på hur du skapar en lokal tillfällig tabell:

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

Namnet du anger för en lokal temporär tabell kan vara högst 116 tecken. Andra tabelltyper kan vara 128 tecken, men lokala temporära tabeller läggs automatiskt till med ett systemgenererat numeriskt suffix.

Exempel 2 – Skapa en global tillfällig tabell

Här är ett exempel på hur du skapar en global temporär tabell:

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

Globala temporära tabellnamn kan vara maximalt 128 tecken. SQL Server lägger inte till ett systemgenererat numeriskt suffix till globala temporära tabeller som det gör för lokala temporära tabeller, så du kan använda hela utrymmet.

Exempel 3 – Se de tillfälliga tabellerna

Jag kan köra följande fråga för att se mina nyskapade tillfälliga tabeller.

SELECT name
FROM tempdb.sys.tables
WHERE name LIKE '#Cats%'
OR name = '##Cats';

Resultat:

+----------------------------------------------------------------------------------------------------------------------------------+
| name                                                                                                                             |
|----------------------------------------------------------------------------------------------------------------------------------|
| ##Cats                                                                                                                           |
| #Cats_______________________________________________________________________________________________________________000000000018 |
+----------------------------------------------------------------------------------------------------------------------------------+

Vi kan se att den lokala temporära tabellen har fått det systemgenererade numeriska suffixet tillagt, och det är därför min fråga använder LIKE operator för den tabellen.

Exempel 4 – Ny session

Om jag öppnar en ny session, skapar en lokal temporär tabell med samma namn (Cats), kör sedan den här frågan igen, jag får detta:

+----------------------------------------------------------------------------------------------------------------------------------+
| name                                                                                                                             |
|----------------------------------------------------------------------------------------------------------------------------------|
| ##Cats                                                                                                                           |
| #Cats_______________________________________________________________________________________________________________000000000018 |
| #Cats_______________________________________________________________________________________________________________000000000019 |
+----------------------------------------------------------------------------------------------------------------------------------+

Så flera sessioner kan skapa en lokal tabell med samma namn eftersom SQL Server ändrar det namnet genom att öka suffixet.

Exempel 5 – Samma session

Men om jag försöker skapa den lokala temporära tabellen igen i samma session får jag detta:

Msg 2714, Level 16, State 6, Line 1
There is already an object named '#Cats' in the database.

Och om jag öppnar ännu en session lyckas jag, och när jag frågar tempdb.sys.tables Jag förstår detta:

+----------------------------------------------------------------------------------------------------------------------------------+
| name                                                                                                                             |
|----------------------------------------------------------------------------------------------------------------------------------|
| ##Cats                                                                                                                           |
| #Cats_______________________________________________________________________________________________________________000000000018 |
| #Cats_______________________________________________________________________________________________________________000000000019 |
| #Cats_______________________________________________________________________________________________________________00000000001B |
+----------------------------------------------------------------------------------------------------------------------------------+

  1. Att skapa en utvecklingsmiljö för att lära sig PL/SQL

  2. flytta data från en tabell till en annan, postgresql edition

  3. Skickar användar-ID till PostgreSQL-utlösare

  4. SQL SELECT AND Operator