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

Qual è l'ambito di CONTEXT_INFO in SQL Server?

Le informazioni sul contesto non hanno ambito (nel senso dell'ambito delle variabili di lingua) e sono legate alla durata della sessione. Una volta impostate, le informazioni di contesto rimangono al valore impostato fino a quando la connessione non viene chiusa (la sessione termina) o fino a quando non viene impostato un nuovo valore. Poiché l'esecuzione su una sessione è sempre sequenziale, non si tratta di concorrenza.

SE imposti le informazioni sul contesto in una procedura, qualsiasi trigger eseguito successivamente su quella sessione vedrà il valore delle informazioni sul contesto appena impostato. L'impostazione del valore dell'ID utente nelle informazioni di contesto, come proposto, e l'utilizzo nei trigger è il tipico esempio di utilizzo delle informazioni di contesto ed è perfettamente sicuro per quanto riguarda la concorrenza, poiché in pratica non c'è concorrenza di cui parlare. Se prevedi di impostare le informazioni di contesto in una procedura memorizzata e quindi fare affidamento su di esse in un trigger che viene eseguito a causa delle eliminazioni che si verificano in detta procedura, il tuo batch non è ancora terminato, quindi, in base all'articolo che hai collegato, recuperi le informazioni conetxt da sys.dm_exec_requests DMV o da CONTEXT_INFO() funzione. Non verrà ancora inviato in sys.dm_exec_sessions , ciò può avvenire solo dopo aver chiuso la stored procedure e aver terminato qualsiasi altra chiamata nel batch T-SQL inviato al server (la 'richiesta').