Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ambito provvisorio della tabella?

Innanzitutto, le tabelle temporanee locali create all'interno di una procedura vengono eliminate al termine della procedura. Dal BOL su Crea tabella :

Se il tuo codice di accesso ai dati sta aprendo correttamente una connessione, chiamando una procedura memorizzata e quindi chiudendo la connessione, la tabella temporanea viene creata nella procedura viene effettivamente distrutta.

Dico "efficacemente" per sollevare un altro punto. Non consiglierei di eliminare la tabella temporanea alla fine della procedura, anche se aggiungerei un controllo appena prima di creare la tabella temporanea e rimuoverla se esiste (ad es. if object_id('tempdb..#Foo') is not null ). L'argomento contro l'eliminazione della tabella temporanea alla fine è che chiamando l'istruzione Drop si forza SQL Server a spendere risorse per distruggere la tabella in quel momento mentre si attende la fine della procedura. Se invece lo lasci uscire dall'ambito, la tua procedura termina immediatamente e consenti a SQL Server di distruggere la tabella in un momento a sua scelta.