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

Introduzione alle tabelle temporanee in SQL Server

In SQL Server, una tabella temporanea è un certo tipo di tabella che esiste fino a quando non esce dall'ambito (a meno che non venga esplicitamente eliminato).

Questo è diverso da una tabella normale (persistente), in cui la tabella normale esiste permanentemente nel database fino a quando non la elimini esplicitamente.

Vantaggi delle tabelle temporanee

Le tabelle temporanee possono essere utili a volte quando è necessario eseguire più query su un sottoinsieme di un insieme di risultati più ampio. Puoi usare SELECT... INTO con un WHERE clausola per inserire il sottoinsieme di dati in una tabella temporanea. È quindi possibile eseguire query su quella tabella temporanea. Ciò ti evita di dover filtrare costantemente i dati dal set di risultati più ampio quando esegui più query.

Le tabelle temporanee possono essere utili anche dal punto di vista delle autorizzazioni. Se hai bisogno di lavorare con i dati di una tabella persistente ma non disponi di autorizzazioni sufficienti per eseguire tutte le operazioni di cui hai bisogno, puoi copiare quei dati in una tabella temporanea (supponendo che tu abbia accesso in lettura) e fare tutto ciò che devi fare .

Le tabelle temporanee possono essere utilizzate anche se non si dispone dell'autorizzazione per creare una tabella (persistente) nel database corrente.

Un altro aspetto utile delle tabelle temporanee è che puoi usarle per eseguire rapide query ad hoc durante l'esecuzione di un test, la dimostrazione di un concetto, ecc., senza preoccuparti di lasciare una scia di tabelle persistenti che hai dimenticato di eliminare.

TempDB

Le tabelle temporanee vengono create nel TempDB Banca dati. Questo è un database di sistema che memorizza oggetti utente temporanei come tabelle e indici temporanei, procedure memorizzate temporanee, variabili di tabella, tabelle restituite in funzioni con valori di tabella e cursori. Memorizza anche oggetti interni creati dal motore di database e archivi di versioni.

Qualsiasi utente può creare tabelle temporanee in TempDB . Non è necessario configurare autorizzazioni speciali per TempDB accesso.

Sintassi

Le tabelle temporanee vengono create utilizzando la stessa sintassi delle tabelle normali. La differenza è che le tabelle temporanee sono precedute da uno o due segni numerici (# ):

  • Le tabelle temporanee locali sono precedute da un unico segno numerico (ad es. #table_name )
  • Le tabelle temporanee globali sono precedute da un doppio segno numerico (ad es. ##table_name )

Esempio di creazione di un locale tabella temporanea:

CREATE TABLE #LocalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Esempio di creazione di un globale tabella temporanea:

CREATE TABLE ##GlobalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Le tabelle temporanee locali sono visibili solo nella sessione corrente e le tabelle temporanee globali sono visibili a tutte le sessioni.

Quanto dura un tavolo temporaneo?

Le tabelle temporanee vengono automaticamente eliminate quando escono dall'ambito.

Puoi anche eliminare in modo esplicito una tabella temporanea utilizzando DROP TABLE .

Il momento esatto in cui una tabella temporanea viene eliminata automaticamente dipende dal fatto che la tabella temporanea sia locale o globale e dal fatto che sia stata creata o meno in una stored procedure.

  • Locale :una tabella temporanea locale creata in una procedura memorizzata viene eliminata automaticamente al termine della procedura memorizzata. La tabella può essere referenziata da qualsiasi stored procedure nidificata eseguita dalla stored procedure che ha creato la tabella. Non è possibile fare riferimento alla tabella dal processo che ha chiamato la stored procedure che ha creato la tabella.

    Tutte le altre tabelle temporanee locali vengono eliminate automaticamente alla fine della sessione corrente.

  • Globale :le tabelle temporanee globali vengono automaticamente eliminate al termine della sessione che ha creato la tabella e tutte le altre attività hanno smesso di farvi riferimento. L'associazione tra un'attività e una tabella viene mantenuta solo per la durata di una singola istruzione T-SQL. Ciò significa che una tabella temporanea globale viene eliminata al completamento dell'ultima istruzione T-SQL che faceva riferimento attivamente alla tabella al termine della sessione di creazione.

Schema

Tutte le tabelle temporanee vengono create nel dbo schema. Se specifichi in modo esplicito uno schema diverso, viene ignorato.

Chiavi estere

I vincoli FOREIGN KEY non vengono applicati alle tabelle temporanee. Se si specifica una chiave esterna, la tabella viene comunque creata, solo senza una chiave esterna. Ti verrà restituito un messaggio per informarti di ciò.