Alessandro
2006-05-18 14:50:51 UTC
Salve a tutti,
volevo avere un chiarimento su come vengono effettivamente gestite le
tabelle temporanee globali (##) da SQL Server. A dispetto di quanto scritto
nei BOL (riporto di seguito una parte integrante) la mia esperienza nell'uso
di tali tabelle mi porta a dire che indipendentemente dal fatto che la
tabella temporanea sia stata usata da n connessioni (per insert, update o
select) la tabella verrà comunque cancellata nel momento in cui la
connessione che l'ha create viene chiusa (al limite se in quel momento la
tabella è loccata la cancellazione viene ritardata fino all'eliminazione dei
lock).
I BOL dicono:
"Ad esempio, se si crea una tabella denominata employees, la tabella può
essere utilizzata da chiunque disponga delle autorizzazioni di protezione
nel database per utilizzarla fino a quando non viene eliminata. Se si crea
una tabella temporanea locale denominata #employees, la tabella può essere
utilizzata soltanto dall'utente che l'ha creata e verrà eliminata alla
chiusura della connessione di tale utente. Se si crea una tabella temporanea
globale denominata ##employees, tutti gli utenti del database possono
utilizzare tale tabella. Se la tabella non viene utilizzata da altri utenti
dopo che è stata creata, verrà eliminata alla chiusura della connessione
dell'utente che l'ha creata. Se la tabella viene utilizzata da altri utenti
dopo che è stata creata, verrà eliminata quando tutti gli utenti chiuderanno
la connessione."
Da quanto scritto nei BOL (ho controllato anche nella versione inglese per
vedere se poteva essere un problema di traduzione) sembra che la tabella
temporanea globale, se utilizzata da n connessioni, dovrebbe essere
cancellata solamente alla disconnessione di tutte le n connessioni.
C'è un errore nei BOL oppure sbaglio io qualcosa nella gestione delle
tabelle temporanee globali?
GRAZIE,
Alessandro
volevo avere un chiarimento su come vengono effettivamente gestite le
tabelle temporanee globali (##) da SQL Server. A dispetto di quanto scritto
nei BOL (riporto di seguito una parte integrante) la mia esperienza nell'uso
di tali tabelle mi porta a dire che indipendentemente dal fatto che la
tabella temporanea sia stata usata da n connessioni (per insert, update o
select) la tabella verrà comunque cancellata nel momento in cui la
connessione che l'ha create viene chiusa (al limite se in quel momento la
tabella è loccata la cancellazione viene ritardata fino all'eliminazione dei
lock).
I BOL dicono:
"Ad esempio, se si crea una tabella denominata employees, la tabella può
essere utilizzata da chiunque disponga delle autorizzazioni di protezione
nel database per utilizzarla fino a quando non viene eliminata. Se si crea
una tabella temporanea locale denominata #employees, la tabella può essere
utilizzata soltanto dall'utente che l'ha creata e verrà eliminata alla
chiusura della connessione di tale utente. Se si crea una tabella temporanea
globale denominata ##employees, tutti gli utenti del database possono
utilizzare tale tabella. Se la tabella non viene utilizzata da altri utenti
dopo che è stata creata, verrà eliminata alla chiusura della connessione
dell'utente che l'ha creata. Se la tabella viene utilizzata da altri utenti
dopo che è stata creata, verrà eliminata quando tutti gli utenti chiuderanno
la connessione."
Da quanto scritto nei BOL (ho controllato anche nella versione inglese per
vedere se poteva essere un problema di traduzione) sembra che la tabella
temporanea globale, se utilizzata da n connessioni, dovrebbe essere
cancellata solamente alla disconnessione di tutte le n connessioni.
C'è un errore nei BOL oppure sbaglio io qualcosa nella gestione delle
tabelle temporanee globali?
GRAZIE,
Alessandro