sql >> Database >  >> RDS >> Sqlserver

Een tijdelijke tabel maken in SQL Server

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 |
+----------------------------------------------------------------------------------------------------------------------------------+

  1. MySQL - Gegevens selecteren op tekenreekslengte

  2. Hoe records van de huidige maand in MySQL te krijgen

  3. Retourwaarde ophalen uit opgeslagen procedure in C#

  4. Object van klasse DateTime kon niet worden geconverteerd naar string