Domanda

Qual è la differenza tra le tabelle temporanee locali e globali in SQL Server?

È stato utile?

Soluzione

Trovo questa spiegazione abbastanza chiaro (è pura copia da Technet ):

  

Ci sono due tipi di tabelle temporanee: locale e globale. tabelle temporanee locali sono visibili solo ai loro creatori durante la stessa connessione a un'istanza di SQL Server come quando i tavoli sono stati creati o riferimento. tabelle temporanee locali vengono cancellati dopo l'utente si disconnette dal l'istanza di SQL Server. tabelle temporanee globali sono visibili a qualsiasi utente e qualsiasi connessione dopo la loro creazione, e vengono eliminati quando tutti gli utenti che sono riferimento alla disconnessione tabella dalla istanza di SQL Server.

Altri suggerimenti

  • variabili Tabella (DECLARE @t TABLE) sono visibili solo per la connessione che lo crea, e vengono cancellati quando il batch o memorizzato estremità procedura.

  • tabelle temporanee locali (CREATE TABLE #t) sono visibili solo al connessione che crea, e vengono eliminati quando la connessione è chiuso.

  • globali tabelle temporanee (CREATE TABLE ##t) sono visibili a tutti, e svaniscono tutte le connessioni che le hanno fatto riferimento hanno chiuso.

  • Tempdb tabelle permanenti (USE tempdb CREATE TABLE t) sono visibili a tutti, e vengono eliminati quando il server viene riavviato.

Citando dalla documentazione in linea:

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

Le tabelle temporanee vengono eliminate automaticamente quando vanno fuori portata, se non esplicitamente sceso utilizzando DROP TABLE:

  • Una tabella temporanea locale creato in una stored procedure viene interrotta automaticamente quando la completa l'stored procedure. La tabella può essere indicata da qualsiasi stored procedure nidificate eseguite dalla stored procedura di creazione del tavolo. La tabella non può essere riferimento il processo che chiama la stored procedure che ha creato la tabella.
  • Tutte le altre tabelle temporanee locali vengono eliminati automaticamente al termine della sessione corrente.
  • globali tabelle temporanee vengono eliminate automaticamente quando la sessione che ha creato le estremità tavolo e tutti gli altri compiti hanno smesso di riferimento. L'associazione tra un compito e un tavolo viene mantenuta solo per la durata di una singola istruzione Transact-SQL. Ciò significa che una tabella temporanea globale è caduto al completamento dell'ultimo istruzione Transact-SQL che è stato attivamente riferimento alla tabella quando la sessione si è conclusa la creazione.

1.) A temporanea locale tabella esiste solo per la durata di una connessione o, se definito all'interno di un'istruzione composta, per la durata dell'istruzione composta.

  

tabelle temporanee locali sono disponibili solo per la sessione di SQL Server o   connessione (mezzi singolo utente) che creano le tabelle. Questi sono   cancellato automaticamente quando la sessione che ha creato le tabelle ha   stato chiuso. Local nome della tabella temporanea si fissava con il singolo hash   ( "#") Segno.

CREATE TABLE #LocalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, 'Name','Address');
GO
Select * from #LocalTemp
  

L'ambito di tabella temporanea locale esistono per la sessione corrente di corrente   mezzi di utente alla finestra query corrente. Se si chiude la corrente   finestra di query o aprire una nuova finestra di query e cercherà di trovare sopra   tabella temporanea creata, che vi darà l'errore.


2.) A resti globali temporanei tabella del database in modo permanente, ma le file esiste solo all'interno di una determinata connessione. Quando il collegamento viene chiuso, i dati nella tabella temporanea globale scompare. Tuttavia, i resti di definizione tabella con il database per l'accesso quando il database si apre la prossima volta.

  

tabelle temporanee globali sono disponibili a tutte le sessioni di SQL Server o   connessioni (mezzi tutto l'utente). Questi possono essere creati da qualsiasi SQL   utente di connessione del server e questi vengono automaticamente eliminati quando tutti   le connessioni SQL Server sono stati chiusi. tabella temporanea globale   nome è lo fissò con il doppio hash ( "##") segno.

CREATE TABLE ##GlobalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into ##GlobalTemp values ( 1, 'Name','Address');
GO
Select * from ##GlobalTemp
  

tabelle temporanee globali sono visibili a tutte le connessioni SQL Server   mentre le tabelle temporanee locali sono visibili solo a corrente SQL Server   collegamento.

E 'la pena ricordare che c'è anche: banca dati con ambito globale tabelle temporanee (attualmente supportato solo da Azure SQL Database).

  

globali tabelle temporanee per SQL Server (iniziati con ## nome della tabella) sono memorizzati in tempdb e condivisa tra le sessioni di tutti gli utenti in tutta l'intera istanza di SQL Server.

     

Azure SQL database supporta le tabelle temporanee globali che vengono memorizzati anche in tempdb e come ambito al livello di database. Ciò significa che le tabelle temporanee globali sono condivisi per le sessioni di tutti gli utenti all'interno dello stesso database SQL Azure. Le sessioni utente da altri database non possono accedere alle tabelle temporanee globali.

-- Session A creates a global temp table ##test in Azure SQL Database testdb1
-- and adds 1 row
CREATE TABLE ##test ( a int, b int);
INSERT INTO ##test values (1,1);

-- Session B connects to Azure SQL Database testdb1 
-- and can access table ##test created by session A
SELECT * FROM ##test
---Results
1,1

-- Session C connects to another database in Azure SQL Database testdb2 
-- and wants to access ##test created in testdb1.
-- This select fails due to the database scope for the global temp tables 
SELECT * FROM ##test
---Results
Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top