Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Festlegen von Schlüssel/Wert-Paaren im Sitzungskontext in SQL Server (sp_set_session_context)

In SQL Server können Sie den sp_set_session_context verwenden gespeicherte Prozedur zum Festlegen von Schlüssel/Wert-Paaren im Sitzungskontext.

Diese Schlüssel/Wert-Paare verbleiben dann in Ihrem Sitzungskontext, bis Ihre Verbindung zu SQL Server geschlossen wird. Sie können diese Werte während der gesamten Lebensdauer Ihrer Sitzung in gespeicherten Prozeduren und anderem T-SQL-Code verwenden.

Diese Methode zum Verwalten des Sitzungsstatus wurde erstmals in SQL Server 2016 eingeführt. Vor dieser Version mussten Sie SET CONTEXT_INFO verwenden , das eine ähnliche, aber viel eingeschränktere Möglichkeit zum Speichern des Sitzungsstatus bietet.

Beispiel 1 – Legen Sie den Wert fest

Hier ist ein Beispiel, um zu demonstrieren, wie man sp_set_session_context verwendet um ein Schlüssel/Wert-Paar festzulegen.

EXEC sp_set_session_context
  @key = N'user_id',
  @value = 15;

Sie können auch die folgende Syntax verwenden:

EXEC sp_set_session_context 'user_id', 15;

Es gibt auch ein optionales Nur-Lese-Flag, das Sie setzen können. Siehe unten für ein Beispiel.

Beispiel 2 – Lesen Sie den Wert

Sie können den SESSION_CONTEXT() verwenden Funktion, um den Wert eines Schlüssels zu lesen.

So lesen Sie den Wert, den ich im vorherigen Beispiel festgelegt habe.

SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Ergebnis:

+-----------+
| user_id   |
|-----------|
| 15        |
+-----------+

Beispiel 3 – Aktualisieren Sie den Wert

Sie können den Wert aktualisieren, solange Sie ihn nicht als schreibgeschützt angegeben haben.

EXEC sp_set_session_context 'user_id', 73;
SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Ergebnis:

+-----------+
| user_id   |
|-----------|
| 73        |
+-----------+

Beispiel 4 – Auf „Nur Lesen“ setzen

Wie bereits erwähnt, gibt es auch ein optionales Nur-Lese-Flag, das Sie setzen können. Ein Wert von 1 setzt es auf schreibgeschützt und einen Wert von 0 (der Standardwert) ist nicht schreibgeschützt.

Wenn Sie es auf schreibgeschützt setzen, können Sie den Wert nicht aktualisieren, ohne die Verbindung zu SQL Server zu trennen und erneut zu verbinden.

Hier ist ein Beispiel für das Setzen des Nur-Lesen-Flags.

EXEC sp_set_session_context 
  @key = N'user_id', 
  @value = 15, 
  @read_only = 1;
SELECT SESSION_CONTEXT(N'user_id') AS user_id;

Ergebnis:

+-----------+
| user_id   |
|-----------|
| 15        |
+-----------+

Versuchen wir nun, den Wert zu ändern:

EXEC sp_set_session_context 'user_id', 73;

Ergebnis:

Msg 15664, Level 16, State 1, Line 1
Cannot set key 'user_id' in the session context. The key has been set as read_only for this session.