In SQL Server, qual è la differenza tra una tabella @, una tabella # e una tabella ##?
In SQL Server, qual è la differenza tra una tabella @, una tabella # e una tabella ##?
Risposte:
#table si riferisce a una tabella temporanea locale (visibile solo all'utente che l'ha creata).
##table si riferisce a una tabella temporanea globale (visibile a tutti gli utenti).
@variableName si riferisce a una variabile che può contenere valori a seconda del tipo.
#e le ##tabelle sono tabelle effettive rappresentate nel database temporaneo. Queste tabelle possono avere indici e statistiche ed è possibile accedervi attraverso sproc in una sessione (nel caso di una tabella temporanea globale, è disponibile tra le sessioni).
@Table è una variabile di tabella.
Per ulteriori informazioni : http://www.sqlteam.com/article/temporary-tables
Mi concentrerei sulle differenze tra #table e @table. ## table è una tabella temporanea globale e per la cronaca in oltre 10 anni di utilizzo di SQL Server devo ancora imbattermi in un caso d'uso valido. Sono sicuro che alcuni esistono ma la natura dell'oggetto lo rende altamente inutilizzabile IMHO.
La risposta a @whiner di @marc_s è assolutamente vera: è un mito prevalente che le variabili della tabella vivano sempre nella memoria. In realtà è abbastanza comune che una variabile di tabella vada su disco e funzioni proprio come una tabella temporanea.
Comunque suggerisco di leggere l'insieme delle differenze seguendo i link segnalati da @Astander. La maggior parte della differenza implica limitazioni su ciò che non puoi fare con le variabili @table.
CREATE TABLE #t
Crea una tabella che è visibile solo su e durante quella CONNESSIONE lo stesso utente che crea un'altra connessione non sarà in grado di vedere la tabella #t dall'altra connessione.
CREATE TABLE ##t
Crea una tabella temporanea visibile ad altre connessioni. Ma la tabella viene eliminata al termine della connessione di creazione.
SqlConnection.Open()con la stessa stringa di connessione è la stessa CONNESSIONE ?