Ho una stored procedure che prima controlla una tabella temporanea (#temp_table), la elimina se esiste, usa la tabella, quindi alla fine la cade quando ha finito. Questo SP viene chiamato in modo casuale quando un utente fa qualcosa per attivarlo ed è probabile che a volte l'SP venga eseguito nello stesso momento o con qualche sovrapposizione.In MS SQL Server 2005, cosa succede quando si accede a una tabella temporanea da diverse esecuzioni dello stesso SP?
Diciamo che ho Exec1 ed Exec2 entrambi della stessa SP che creano, alterano e rilasciano la tabella #temp, e sono in esecuzione in millisecondi l'una dall'altra.
Cosa succede? Exec1 bloccherà #temp_table e Exec2 attende mentre Exec1 termina? Sarebbe ovviamente auspicabile nel mio caso. Non vorrei che sia Exec1 & 2 per utilizzare la tabella allo stesso tempo, né vorrei Exec2 non riuscire perché Exec1 sta già utilizzando la tabella.
[EDIT] Devo convertire la mia tabella temporanea in una variabile di tabella?
Quindi nel mio SP ho 'SE OBJECT_ID ('tempdb .. # temp_table') NON È NULL \t DROP TABLE # temp_table' questo non fa nulla? Oppure questo potrebbe avere un impatto negativo su altre esecuzioni? – jreed121
Non è necessario se lo si chiama da una nuova sessione ogni volta (ad esempio da un'app Web), poiché l'ambito della tabella temporanea è limitato alla sessione. Vedi la mia risposta per maggiori informazioni. –
Non è necessario, come ha detto Dommer, ma è sempre una buona pratica controllare l'esistenza di un OBJECT prima di provare a crearlo. mantieni quel pezzo di codice nel tuo proc. –