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

Creare una tabella temporanea in SQL Server

In SQL Server, le tabelle temporanee vengono create utilizzando lo stesso CREATE TABLE sintassi come tabelle normali. La differenza è che i nomi delle tabelle temporanee sono preceduti da uno o due simboli numerici (# ), a seconda che si tratti di una tabella temporanea locale o di una tabella temporanea globale:

  • Tabelle temporanee locali sono preceduti da un unico segno numerico (# )
  • Tabelle temporanee globali sono preceduti da un doppio segno numerico (## )

Esempio 1:creazione di una tabella temporanea locale

Ecco un esempio di creazione di una tabella temporanea locale:

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

Il nome specificato per una tabella temporanea locale può contenere un massimo di 116 caratteri. Altri tipi di tabella possono essere di 128 caratteri, ma le tabelle temporanee locali vengono automaticamente aggiunte con un suffisso numerico generato dal sistema.

Esempio 2:creazione di una tabella temporanea globale

Ecco un esempio di creazione di una tabella temporanea globale:

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

I nomi delle tabelle temporanee globali possono contenere un massimo di 128 caratteri. SQL Server non aggiunge un suffisso numerico generato dal sistema alle tabelle temporanee globali come fa per le tabelle temporanee locali, quindi puoi utilizzare tutto lo spazio.

Esempio 3 – Visualizza le tabelle temporanee

Posso eseguire la seguente query per vedere le mie tabelle temporanee appena create.

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

Risultato:

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

Possiamo vedere che alla tabella temporanea locale è stato aggiunto il suffisso numerico generato dal sistema, ed è per questo che la mia query utilizza LIKE operatore per quella tabella.

Esempio 4 – Nuova sessione

Se apro una nuova sessione, creo una tabella temporanea locale con lo stesso nome (Cats), quindi eseguo di nuovo questa query, ottengo questo:

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

Quindi più sessioni possono creare una tabella locale con lo stesso nome perché SQL Server modifica quel nome incrementando il suffisso.

Esempio 5 – Stessa sessione

Tuttavia, se provo a creare nuovamente la tabella temporanea locale nella stessa sessione, ottengo questo:

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

E se apro un'altra sessione, ho successo e quando interrogo tempdb.sys.tables Ho questo:

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