Ho una domanda su un pezzo di documentazione sulle tabelle temporanee che ho letto di recente su TechNet . Il quarto paragrafo della sezione Tabelle temporanee su quella pagina recita come segue:
Se viene creata una tabella temporanea con un vincolo denominato e la tabella temporanea viene creata nell'ambito di una transazione definita dall'utente, solo un utente alla volta può eseguire l'istruzione che crea la tabella temporanea. Ad esempio, se una procedura memorizzata crea una tabella temporanea con un vincolo di chiave primaria denominato, la procedura memorizzata non può essere eseguita contemporaneamente da più utenti.
Lavoro in un ambiente in cui facciamo un uso significativo di una manciata di stored procedure che utilizzano tabelle temporanee indicizzate e non abbiamo mai riscontrato un problema in cui gli utenti devono attendere il completamento di un'esecuzione prima che inizi la successiva. Spero che continuerà ad essere il caso, ma temo che potrebbe diventare un problema se questo avvertimento non fosse compreso correttamente.
In particolare, non sono chiaro i seguenti punti:
- Questo vale solo per le tabelle temporanee globali o anche per quelle locali? Sembra strano che una tabella non visibile al di fuori della sessione (come in quest'ultimo caso) impedisca l'esecuzione simultanea di un'altra sessione.
- Cosa si qualifica come "vincolo denominato"? Non tutti i vincoli hanno nomi (anche se sono generati dal sistema)? Si riferisce a vincoli con un alias definito dall'utente? Questo mi sembra una frase scadente.
- "Utenti multipli" significa in realtà sessioni multiple? Queste procedure vengono chiamate tramite la nostra applicazione utilizzando un singolo account di servizio, quindi il 99,9% delle chiamate ai nostri script vengono effettuate sul DB da quel singolo account (e non mi preoccupo della chiamata occasionale che un amministratore può effettuare sul back-end). Se l'account del servizio può eseguire lo sproc in più sessioni contemporaneamente, questo problema è discutibile per i miei scopi.