V SQL Server můžete použít sp_set_session_context
uložená procedura pro nastavení párů klíč/hodnota v kontextu relace.
Tyto páry klíč/hodnota pak zůstanou v kontextu relace, dokud se neuzavře připojení k serveru SQL. Tyto hodnoty můžete používat v uložených procedurách a dalším kódu T-SQL po celou dobu trvání relace.
Tato metoda pro udržování stavu relace byla poprvé představena v SQL Server 2016. Před tímto vydáním byste museli použít SET CONTEXT_INFO
, který poskytuje podobný, ale mnohem omezenější způsob ukládání stavu relace.
Příklad 1 – Nastavení hodnoty
Zde je příklad, který ukazuje, jak používat sp_set_session_context
pro nastavení páru klíč/hodnota.
EXEC sp_set_session_context @key = N'user_id', @value = 15;
Můžete také použít následující syntaxi:
EXEC sp_set_session_context 'user_id', 15;
K dispozici je také volitelný příznak pouze pro čtení, který můžete nastavit. Příklad viz níže.
Příklad 2 – Přečtěte si hodnotu
Můžete použít SESSION_CONTEXT()
funkce pro čtení hodnoty klíče.
Zde je návod, jak číst hodnotu, kterou jsem nastavil v předchozím příkladu.
SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Výsledek:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Příklad 3 – Aktualizace hodnoty
Hodnotu můžete aktualizovat, pokud jste ji neurčili jako pouze pro čtení.
EXEC sp_set_session_context 'user_id', 73; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Výsledek:
+-----------+ | user_id | |-----------| | 73 | +-----------+
Příklad 4 – Nastavení pouze pro čtení
Jak již bylo zmíněno, existuje také volitelný příznak pouze pro čtení, který můžete nastavit. Hodnota 1
nastaví jej na pouze pro čtení a na hodnotu 0
(výchozí) není jen pro čtení.
Pokud jej nastavíte na pouze pro čtení, nebudete moci aktualizovat hodnotu bez odpojení a opětovného připojení k serveru SQL.
Zde je příklad nastavení příznaku pouze pro čtení.
EXEC sp_set_session_context @key = N'user_id', @value = 15, @read_only = 1; SELECT SESSION_CONTEXT(N'user_id') AS user_id;
Výsledek:
+-----------+ | user_id | |-----------| | 15 | +-----------+
Nyní zkusme změnit hodnotu:
EXEC sp_set_session_context 'user_id', 73;
Výsledek:
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.