Utilisation des informations de contexte de session

Les informations de contexte de session permettent aux applications de définir des valeurs binaires jusqu'à 128 octets pouvant être référencées en plusieurs lots d'instructions, de procédures stockées, de déclencheurs ou de fonctions définies par l'utilisateur exécutées au cours de la même session. Vous pouvez définir un contexte de session à l'aide de l'instruction SET CONTEXT_INFO, puis extraire celui-ci en utilisant un des éléments suivants :

  • La fonction CONTEXT_INFO.
  • Les colonnes context_info dans les vues de gestion dynamique sys.dm_exec_requests et sys.dm_exec_sessions et dans la vue de compatibilité sys.sysprocesses.

Les informations de contexte de session sont différentes des variables Transact-SQL, dont la portée est limitée au lot Transact-SQL, à la procédure stockée, au déclencheur ou à la fonction définie par l'utilisateur en cours. Les informations de contexte de session peuvent être utilisées pour stocker des informations spécifiques à chaque utilisateur ou des informations relatives à l'état actuel de l'application, qui peuvent ensuite servir à contrôler la logique d'instructions Transact-SQL.

L'utilisation de la fonction CONTEXT_INFO est la méthode privilégiée pour récupérer les informations de contexte pour la session en cours. Vous pouvez également récupérer des valeurs de contexte de session pour toutes les sessions et tous les lots en cours dans les colonnes context_info des vues de gestion dynamique sys.dm_exec_requests et sys.dm_exec_sessions. Pour sélectionner une valeur dans ces vues, vous devez avoir les autorisations SELECT et VIEW SERVER STATE. Ces autorisations ne sont pas obligatoires lorsque vous utilisez la fonction CONTEXT_INFO.

Les informations de contexte de session servent principalement à définir une valeur qui peut être rendue persistante dans plusieurs lots au cours d'une même session. L'exemple suivant illustre la définition d'une valeur qui peut être référencée après l'exécution de plusieurs lots.

-- Set context information at start.
SET CONTEXT_INFO 0x125666698456;
GO
-- Perform several nonrelated batches.
EXEC sp_helpfile;
GO
USE AdventureWorks;
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

Valeurs des informations de contexte de session

Si l'instruction SET CONTEXT_INFO n'a pas encore été exécutée pour la session en cours, les valeurs de session suivantes sont retournées :

  • La fonction CONTEXT_INFO retourne NULL.
  • Les valeurs de la colonne context_info dans les vues système sont remplacées par 128 octets de zéros binaires pour les lignes associées à la session et la demande en cours.

Une fois que l'instruction SET CONTEXT_INFO a été exécutée, la nouvelle valeur est immédiatement disponible dans les sources suivantes :

  • La fonction CONTEXT_INFO :

    SELECT CONTEXT_INFO() AS MyCtxInfo;
    
  • La colonne context_info de la ligne sys.dm_exec_requests associée au lot en cours :

    SELECT context_info AS MyCtxInfo
    FROM sys.dm_exec_requests
    WHERE session_id = @@SPID
       AND request_id = CURRENT_REQUEST_ID();
    
  • La colonne context_info de la ligne sys.sysprocesses associée à la session en cours :

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

La nouvelle valeur n'est pas propagée à la vue sys.dm_exec_sessions tant que le lot qui contient l'instruction SET CONTEXT_INFO est en cours d'exécution. Lorsque le lot a fini de s'exécuter, la nouvelle valeur est placée dans la ligne associée à la session en cours.

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

L'exemple suivant indique le moment où une nouvelle valeur d'information de contexte de session est visible dans les vues système ou dans la fonction 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;

Informations de contexte de session et MARS

Les ensembles de résultats actifs multiples (MARS, Multiple Active Result Sets) permettent aux applications d'exécuter plusieurs lots ou demandes simultanément lors de la même connexion.

Lorsqu'un des lots d'une connexion MARS exécute SET CONTEXT_INFO, la nouvelle valeur de contexte est immédiatement disponible dans les sources suivantes :

  • La fonction CONTEXT_INFO qui est exécutée par le même lot ayant défini la valeur.
  • La ligne dans la vue sys.dm_exec_requests qui est associée au lot ayant défini la valeur.

La nouvelle valeur de contexte n'est pas propagée aux sources suivantes tant que le lot ayant défini la valeur est en cours d'exécution :

  • La fonction CONTEXT_INFO qui est exécutée par un autre lot que celui ayant défini la valeur. La fonction CONTEXT_INFO retourne la nouvelle valeur uniquement dans les lots qui sont démarrés après l'exécution du lot ayant défini la valeur.
  • La ligne dans la vue sys.dm_exec_sessions qui est associée au lot ayant défini la valeur.

Voir aussi

Concepts

Environnement d'exécution des lots d'instructions et MARS

Autres ressources

CONTEXT_INFO (Transact-SQL)
SET CONTEXT_INFO (Transact-SQL)
sys.dm_exec_requests
sys.dm_exec_sessions
sys.sysprocesses (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005