sql >> Database >  >> RDS >> Sqlserver

Wat is de reikwijdte van CONTEXT_INFO in SQL Server?

Contextinfo heeft geen bereik (in de zin van taalvariabelen) en is gebonden aan de levensduur van de sessie. Eenmaal ingesteld, blijft de contextinfo op de ingestelde waarde totdat de verbinding wordt gesloten (de sessie wordt beëindigd) of totdat een nieuwe waarde wordt ingesteld. Aangezien de uitvoering van een sessie altijd . is sequentieel, er is geen sprake van gelijktijdigheid.

ALS u de contextinfo in een procedure instelt, zal elke trigger die vervolgens op die sessie wordt uitgevoerd, de nieuw ingestelde waarde voor contextinfo zien. Het instellen van de gebruikers-ID-waarde in de contextinformatie, zoals u voorstelt, en het gebruik ervan in triggers is het typische voorbeeld van het gebruik van contextinformatie en is volkomen veilig met betrekking tot gelijktijdigheid, aangezien er in feite geen gelijktijdigheid is om van te spreken. Als u van plan bent om de contextinformatie in een opgeslagen procedure in te stellen en er vervolgens op te vertrouwen in een trigger die wordt uitgevoerd vanwege verwijderingen die plaatsvinden in de genoemde procedure, dan is uw batch nog niet voltooid, dus volgens het artikel dat u hebt gekoppeld, haalt u de conetxt-info van de sys.dm_exec_requests DMV of van de CONTEXT_INFO() functie. Het wordt nog niet gepusht in sys.dm_exec_sessions , dat kan alleen gebeuren nadat u de opgeslagen procedure hebt afgesloten en een andere aanroep hebt voltooid in de T-SQL-batch die naar de server is verzonden (het 'verzoek').



  1. MySQL:Onjuist sleutelbestand voor tabel '/tmp/#sql_185e_0.MYI' probeer het te repareren

  2. Query invoegen in Oracle:ongeldige tabelnaam

  3. PostgreSQL - Referenties voor externe sleutels wederzijds exclusieve tabellen

  4. Hoe maak ik verbinding met een MySQL-database in Python?