2010-02-08 18 views

risposta

89

#table fa riferimento a una tabella temporanea locale (visibile solo all'utente che l'ha creata).

##table fa riferimento a una tabella temporanea globale (visibile a tutti gli utenti).

@variableName fa riferimento a una variabile che può contenere valori in base al tipo.

applausi

+19

La tua definizione di #table non è completamente corretta, non è limitata all'utente, ma piuttosto alla connessione: se un utente ha più connessioni sarà visibile solo alla connessione che ha creato in primo luogo #table –

+0

@DavinStuder ha offerto un chiarimento cruciale: la distinzione tra una tabella visibile all'utente vs.una tabella visibile solo sulla connessione corrente è molto importante. – mirzmaster

5

# e ## tabelle sono tabelle effettive rappresentati nel database temporaneo. Queste tabelle possono avere indici e statistiche e possono essere consultate attraverso sprocs in una sessione (nel caso di una tabella temporanea globale, è disponibile attraverso le sessioni).

Il parametro @table è una variabile di tabella.

Per maggiori: http://www.sqlteam.com/article/temporary-tables

+4

E la variabile di tabella si troverà anche nel database tempDB, se la sua dimensione è troppo grande per essere conservata in memoria. –

+0

Non sai perché la tua risposta è stata votata, piagnucolone? Ho pensato che contenesse informazioni utili, in particolare sul database temporaneo ... –

+0

Forse perché l'articolo contiene un errore, che è indicato nella sezione commenti di quell'articolo. – Alex

22
+4

Mi rendo conto che questo è da molto tempo indietro, ma dal momento che questa è una risposta solo per collegamento (e il primo collegamento è morto), potrebbe essere aggiornato con i take-away principali da ciascuno dei collegamenti? –

6

mi concentrerò sulle differenze tra #table e @Table. ## table è una tabella temporanea globale e per il record in oltre 10 anni di utilizzo di SQL Server non ho ancora trovato un caso di utilizzo valido. Sono sicuro che alcuni esistono ma la natura dell'oggetto rende IMHO altamente inutilizzabile.

La risposta a @whiner di @marc_s è assolutamente vera: è un mito prevalente che le variabili di tabella vivono sempre nella memoria. In realtà è abbastanza comune per una variabile di tabella andare su disco e operare proprio come una tabella temporanea.

Ad ogni modo suggerisco di leggere l'insieme delle differenze seguendo i collegamenti indicati da @Astander. La maggior parte della differenza riguarda limitazioni su ciò che non puoi fare con le variabili @table.

+0

Ho 5 stored procedure separate che eseguono diverse parti di un calcolo e producono un risultato singolo. Per l'auditing voglio vedere i valori intermedi e così anche l'auditor. Ho regolato le mie procedure per scaricare un po 'in una tabella temporanea ## in modo che entrambi possiamo vederle ma non vengono mantenute (sono necessarie solo durante gli audit). C'è un caso d'uso valido per te (IMHO!). – RyanfaeScotland

+0

@Ryan perché la tabella ## è valida quando potresti aver usato dbo.Table? Non lo considero un caso d'uso valido quando tutto ciò che hai fatto è stato salvato da una dichiarazione DROP. –

+2

Non voglio dare le autorizzazioni DROP del revisore sul mio DB. Inoltre, non voglio dover tornare e riordinare dopo che ha finito. Con una tabella temporanea può eseguire la query tutte le volte che vuole e so che quando ha finito non lascia un'impronta nel DB. – RyanfaeScotland

4
CREATE TABLE #t 

crea una tabella che è visibile solo su e durante quel COLLEGAMENTO lo stesso utente che crea un altro collegamento non sarà in grado di vedere tabella #t dall'altro collegamento.

CREATE TABLE ##t 

Crea una tabella temporanea visibile ad altre connessioni. Ma la tabella viene rilasciata quando viene terminata la connessione di creazione.

0

se avete bisogno di una tabella unica temperatura globale, creare il proprio con un Uniqueidentifier prefisso/suffisso e rilasciare l'esecuzione post, se una se object_id (.... L'unico inconveniente sta usando SQL dinamico e la necessità di rilasciare in modo esplicito.

Problemi correlati