sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är omfattningen av CONTEXT_INFO i SQL Server?

Kontextinformation har inget omfång (i betydelsen språkvariablers omfattning) och är bunden till sessionens livslängd. När den väl har ställts in förblir kontextinformationen vid det inställda värdet tills anslutningen stängs (sessionen avslutas) eller tills ett nytt värde ställs in. Eftersom körning på en session alltid är sekventiell är det ingen fråga om samtidighet.

OM du ställer in kontextinformationen i en procedur, kommer alla utlösare som exekveras på den sessionen att se det nyinställda kontextinfovärdet. Att ställa in användar-id-värdet i kontextinformationen, som du föreslår, och använda det i triggers är det typiska exemplet på användningen av kontextinfo och är helt säkert när det gäller samtidighet, eftersom det i princip inte finns någon samtidighet att tala om. Om du planerar att ställa in kontextinformationen i en lagrad procedur och sedan förlita dig på den i en trigger som körs på grund av raderingar som inträffar i nämnda procedur, så har din batch inte slutförts än så, enligt artikeln du länkade, hämtar du conetxt-informationen från sys.dm_exec_requests DMV eller från CONTEXT_INFO() fungera. Den kommer ännu inte att skickas in i sys.dm_exec_sessions , det kan bara hända efter att du har avslutat den lagrade proceduren och avslutat alla andra anrop i T-SQL-batchen som skickas till servern ('förfrågan').



  1. Fylla i luckor i datum som returneras från databasen - ren SQL-lösning möjlig?

  2. Hur trunkerar jag tabeller korrekt?

  3. MySQL:Dela upp ett stort bord i partitioner eller separata tabeller?

  4. MySQL-användaråtkomst - tabellspecifik