Korzystając z informacji kontekstu sesji

Informacje kontekstowe sesja umożliwia aplikacjom zestaw wartości binarnych maksymalnie 128 bajtów, których można się odwoływać w wielu instancji, procedur przechowywanych, wyzwalaczy lub funkcji zdefiniowanej przez użytkownika na tej samej sesja.zestaw wartość kontekście sesja za pomocą instrukcja CONTEXT_INFO USTAWIĆ i pobrać go przy użyciu jednej z następujących czynności:

  • Funkcja CONTEXT_INFO.

  • context_info Kolumn w sys.dm_exec_requests i sys.dm_exec_sessions Widoki dynamiczne zarządzanie i sys.sysprocesses Widok zgodności.

Informacje kontekstowe sesji różni się od Transact-SQL zmienne, których zakres jest ograniczony do bieżącego Transact-SQL partia, procedura składowana, wyzwalacza lub funkcja zdefiniowanej przez użytkownika.Informacje kontekstowe sesji można przechowywać informacje specyficzne dla każdego użytkownika lub bieżący stan aplikacji.To następnie służą do kontrolowania logikę Transact-SQL instrukcji.

Funkcja CONTEXT_INFO jest preferowanym sposobem pobierania kontekstu sesja dla bieżącej sesja.Można także pobrać wartości kontekstu sesja dla wszystkich bieżących sesja i instancje z context_info kolumn w sys.dm_exec_requests lub sys.dm_exec_sessions dynamiczne zarządzanie widokami.Aby wybrać z tych widoków wymaga uprawnienia SELECT i WYŚWIETL stan serwera.Uprawnienia te nie są wymagane, po użyciu funkcja CONTEXT_INFO.

Podstawowym zastosowaniem informacje kontekstu sesja jest zestaw wartość mogą być pozostawione przez wiele instancji na tej samej sesja.W poniższym przykładzie wartość można odwoływać się po uruchomieniu kilka partii.

-- Set context information at start.
SET CONTEXT_INFO 0x125666698456;
GO
-- Perform several nonrelated batches.
EXEC sp_helpfile;
GO
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE Name LIKE (N'Metal%')
ORDER BY ProductID;
GO
-- Select the context information set several batches earlier.
SELECT CONTEXT_INFO();
GO

Wartości informacji kontekstu sesji

Ustaw CONTEXT_INFO nie ma jeszcze wykonane dla bieżącej sesja, przedstawione są następujące wartości sesja:

  • Funkcja CONTEXT_INFO zwraca wartość NULL.

  • context_info Są wartości z kolumn w widokach systemu zestaw do 128 bajtów binarnych zer dla wierszy skojarzonych z bieżącej sesja i żądania.

Po wykonaniu USTAWIĆ CONTEXT_INFO nowa wartość jest natychmiast dostępne z następujących źródeł:

  • CONTEXT_INFO funkcja:

    SELECT CONTEXT_INFO() AS MyCtxInfo;
    
  • context_info kolumna w sys.dm_exec_requests wiersz skojarzony z bieżącym partia:

    SELECT context_info AS MyCtxInfo
    FROM sys.dm_exec_requests
    WHERE session_id = @@SPID
       AND request_id = CURRENT_REQUEST_ID();
    
  • context_info kolumna w sys.sysprocesses wiersz skojarzony z bieżącej sesja:

    SELECT context_info AS MyCtxInfo
    FROM sys.sysprocesses
    WHERE spid = @@SPID;
    

Nowa wartość nie są propagowane do sys.dm_exec_sessions Widok do instancji, która zawiera zestaw CONTEXT_INFO instrukcja zakończył działanie.Po zakończeniu partia, nowa wartość jest umieszczana w wiersz skojarzony z bieżącej sesja.

SELECT context_info AS MyCtxInfo
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID;

Poniższy przykład przedstawia po nowej sesja wartości informacji kontekstu jest widoczne w systemie widoków lub funkcja CONTEXT_INFO:

-- Set a context value before the batch starts.
SET CONTEXT_INFO 0x9999
GO
-- Set a new context value in the batch.
SET CONTEXT_INFO 0x8888

-- Shows the new value available in the
-- sys.dm_exec_requests view while still in the batch.
SELECT context_info as RequestCtxInfoInBatch
FROM sys.dm_exec_requests
WHERE session_id = @@SPID
   AND request_id = CURRENT_REQUEST_ID();

-- Shows the new value available from the
-- CONTEXT_INFO function while still in the batch.
SELECT CONTEXT_INFO() AS FuncCtxInfoInBatch;

-- Shows that the sys.dm_exec_sessions view still
-- returns the old value in the batch.
SELECT context_info AS SessCtxInfoInBatch
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID;

-- Shows the new value available in the
-- sys.sysprocesses view while still in the batch.
SELECT context_info AS ProcsCtxInfoInBatch
FROM sys.sysprocesses
WHERE spid = @@SPID;

-- End the batch.
GO

-- Shows that the sys.dm_exec_sessions view now
-- returns the new value.
SELECT context_info AS SessCtxInfoAfterBatch
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID;

Informacje kontekstowe sesji i MARS

Wiele zestawów wyników active (MARS) umożliwić uruchamianie wielu instancji lub żądania, w tym samym aplikacji czas dla połączenia.

Jednej partii na połączeniu MARS działa CONTEXT_INFO ustaw wartość nowego kontekstu jest natychmiast dostępne z następujących źródeł:

  • Z CONTEXT_INFO funkcja, która jest uruchamiana w tej samej partia, zestaw wartości.

  • W wierszu sys.dm_exec_requests Widok skojarzony z partii, zestaw wartość.

Aż zakończeniu partia, który ustawia wartość nowej wartości kontekstu nie są propagowane do następujących źródeł:

  • Funkcja CONTEXT_INFO, uruchamianego przez partię innych niż partia, zestaw wartości.CONTEXT_INFO zwraca tylko nową wartość w partia, które są uruchamiane po partia, zestaw wartość zostanie zakończone.

  • W wierszu sys.dm_exec_sessions Widok skojarzony z partii, zestaw wartość.