2009-03-27 12 views

risposta

15

Le tabelle temporanee locali vengono distrutte quando si chiude la connessione a SQL Server. Non è necessario eliminarli manualmente in circostanze normali. Se mantieni una connessione persistente o un pool di connessioni, potresti voler prendere l'abitudine di abbandonare le tabelle temporanee subito dopo l'uso.

Le tabelle temporanee globali, d'altra parte, poiché sono visibili a tutti gli utenti in un determinato database, vengono distrutte insieme all'ultimo collegamento che le fa riferimento.

+0

Suppongo che i servizi di segnalazione non siano una connessione persistente, quindi sarei OK? – Jeff

+7

Credo che questo non sia corretto per le tabelle temporali globali; Credo che le tabelle temporali globali (## MyTempTable) debbano essere eliminate mentre per le normali tabelle temporanee (#MyTempTable) ciò che hai detto si applicherebbe .... Giusto? –

+0

@FrankV: hai ragione. Ho chiarito la mia risposta. – vezult

20

Nonostante il fatto che le tabelle temporanee si interrompano quando termina una connessione, spesso è ancora considerata una buona pratica eliminare esplicitamente tali tabelle per essere assolutamente certi che sia stata effettuata una pulizia.

Ad esempio, se la piattaforma utilizza il pool di connessioni, ovvero le connessioni non possono mai essere eliminate, quindi anche le tabelle temporanee esistono ancora?

Per verificare l'esistenza di una tabella temporanea è possibile utilizzare la seguente dichiarazione/controllo.

if object_id('tempdb..##temptbl') is not null 
begin 
    drop table ##temptbl 
end 
4

In risposta alla seconda parte della tua domanda, per ricercare l'elenco delle tabelle per eliminare, provare questa query:

SELECT * FROM tempdb..sysobjects 

che elencherà tutte le attuali tabelle temporanee globali

+0

Grazie, questo è davvero utile. – Contango

Problemi correlati