Tabella temporanea o variabile tabella?

0
(0)

Capita spesso di confondere due strutture dati simili ma profondamente diverse: le tabelle temporanee e le variabili tabella.

La prima differenza evidente sta nella dichiarazione: le tabelle temporanee iniziano con il cancelletto (detto anche hash: #), le variabili tabella invece iniziano con la chiocciola (detta anche snail: @).

Inoltre le variabili tabella sono create esattamente come le tabelle fisiche:

CREATE TABLE #tmptab (campo1 int, campo2 varchar...)

Mentre le variabili tabella sono create come se fossero delle variabili scalari:

DECLARE @vartab (campo1 int, campo2 varchar...)

Indagando un po’ più a fondo, le differenze sono anche altre: le tabelle temporanee durano per tutto il tempo in cui è attiva la connessione, quindi possiamo crearle e poi usarle anche più volte, nella stessa connessione, finché non scade (per esempio perché si chiude il Management Studio) o finché non si usa un’istruzione esplicita di DROP TABLE #tmptab. Invece le variabili tabella sono usate solo durante l’esecuzione della query. In altre parole, se le popoliamo e poi le vogliamo usare di nuovo, dovremo ripopolarle ogni volta.

Per quanto riguarda gli indici, nelle tabelle temporanee è possibile creare esattamente tutti gli indici che si possono creare nelle tabelle fisiche (anche perché di fatto lo sono!), mentre in una variabile tabella è possibile creare solo una chiave primaria, che automaticamente creerà un indice cluster, ma non è possibile creare altri indici.

Dal momento che, quando si crea una tabella temporanea, SQL server crea fisicamente una tabella nel database di sistema tempdb, non è possibile creare tabelle temporanee dentro una funzione. Comunque è possibile creare una tabella temporanea in una stored procedure.

Infine, le tabelle temporanee possono anche essere rese visibili ad altre connessioni usando un doppio cancelletto durante la creazione:

CREATE TABLE #tabPrivata
CREATE TABLE ##tabPubblica

In questo esempio, la tabella #tabPrivata è visibile solo all’interno della connessione corrente, mentre ##tabPubblica, detta tabella temporanea globale, è visibile da tutte le connessioni, finché non è chiusa la connessione che l’ha creata.

Hai trovato utile questo contenuto?

Valutazione: 0 / 5. Voti: 0

Vota per primo questo contenuto

Ci dispiace che tu abbia trovato inutile o sbagliato questo contenuto

Lasciaci un messaggio

Come possiamo migliorare?

Un commento su “Tabella temporanea o variabile tabella?”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Moderazione dei commenti attiva. Il tuo commento non apparirà immediatamente.