sql >> Database teknologi >  >> RDS >> Sqlserver

Opret en midlertidig tabel i SQL Server

I SQL Server oprettes midlertidige tabeller ved hjælp af den samme CREATE TABLE syntaks som almindelige tabeller. Forskellen er, at midlertidige tabellers navne er præfikset med enten et eller to taltegn (# ), afhængigt af om det er en lokal midlertidig tabel eller global midlertidig tabel:

  • Lokale midlertidige tabeller er præfikset med et enkelt taltegn (# )
  • Globale midlertidige tabeller er præfikset med et dobbelt taltegn (## )

Eksempel 1 – Opret en lokal midlertidig tabel

Her er et eksempel på oprettelse af en lokal midlertidig tabel:

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

Det navn, du angiver for en lokal midlertidig tabel, kan maksimalt være på 116 tegn. Andre tabeltyper kan være på 128 tegn, men lokale midlertidige tabeller tilføjes automatisk med et systemgenereret numerisk suffiks.

Eksempel 2 – Opret en global midlertidig tabel

Her er et eksempel på oprettelse af en global midlertidig tabel:

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

Globale midlertidige tabelnavne kan maksimalt være på 128 tegn. SQL Server tilføjer ikke et systemgenereret numerisk suffiks til globale midlertidige tabeller, som det gør for lokale midlertidige tabeller, så du kan bruge den fulde plads.

Eksempel 3 – Se de midlertidige tabeller

Jeg kan køre følgende forespørgsel for at se mine nyoprettede midlertidige tabeller.

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

Resultat:

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

Vi kan se, at den lokale midlertidige tabel har fået tilføjet det systemgenererede numeriske suffiks, og det er derfor, min forespørgsel bruger LIKE operator for den tabel.

Eksempel 4 – Ny session

Hvis jeg åbner en ny session, opretter en lokal midlertidig tabel med samme navn (Katte), og kør derefter denne forespørgsel igen, jeg får dette:

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

Så flere sessioner kan oprette en lokal tabel med samme navn, fordi SQL Server ændrer dette navn ved at øge suffikset.

Eksempel 5 – Samme session

Men hvis jeg prøver at oprette den lokale midlertidige tabel igen i samme session, får jeg dette:

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

Og hvis jeg åbner endnu en session, har jeg succes, og når jeg forespørger tempdb.sys.tables Jeg forstår dette:

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

  1. Konverter MySQL til SQLite

  2. Søg tekst i felter i hver tabel i en MySQL-database

  3. Hvordan opretter og forespørger jeg linkede databaseservere i SQL Server?

  4. MariaDB og Docker use cases, del 1