SESSION_USER (Transact-SQL)

SESSION_USER retourne le nom d'utilisateur du contexte actuel dans la base de données active.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

SESSION_USER

Types de retour

nvarchar(128)

Notes

Utilisez SESSION_USER comme une fonction standard ou avec les contraintes DEFAULT dans les instructions CREATE TABLE ou ALTER TABLE. La fonction SESSION_USER peut être insérée dans une table quand aucune valeur par défaut n'est spécifiée. Cette fonction ne prend pas d'arguments. SESSION_USER peut s'utiliser dans des requêtes.

Si un appel à SESSION_USER intervient après un commutateur de contexte, cette fonction retourne le nom d'utilisateur du nouveau contexte.

Exemples

A. Utilisation de SESSION_USER pour obtenir le nom d'utilisateur de la session active

L'exemple suivant déclare une variable de type nchar, lui affecte la valeur actuelle de SESSION_USER, puis imprime la variable avec un texte descriptif.

DECLARE @session_usr nchar(30);
SET @session_usr = SESSION_USER;
SELECT 'This session''s current user is: '+ @session_usr;
GO

Voici les résultats obtenus lorsque l'utilisateur de la session est Surya :

-------------------------------------------------------------- 
This session's current user is: Surya                            

(1 row(s) affected)

B. Utilisation de SESSION_USER avec les contraintes DEFAULT

L'exemple suivant crée une table qui utilise SESSION_USER en tant que contrainte DEFAULT pour obtenir le nom de la personne qui enregistre la réception d'une livraison.

USE AdventureWorks
GO
CREATE TABLE deliveries3
(
 order_id int IDENTITY(5000, 1) NOT NULL,
 cust_id  int NOT NULL,
 order_date smalldatetime NOT NULL DEFAULT GETDATE(),
 delivery_date smalldatetime NOT NULL DEFAULT 
    DATEADD(dd, 10, GETDATE()),
 received_shipment nchar(30) NOT NULL DEFAULT SESSION_USER
)
GO

Les enregistrements ajoutés à la table seront marqués par le nom d'utilisateur de l'utilisateur en cours. Dans cet exemple, Wanida, Sylvester et Alejandro vérifient la réception des livraisons. Une émulation est possible en changeant de contexte utilisateur à l'aide de l'instruction EXECUTE AS.

EXECUTE AS USER = 'Wanida'
INSERT deliveries3 (cust_id)
VALUES (7510)
INSERT deliveries3 (cust_id)
VALUES (7231)
REVERT
EXECUTE AS USER = 'Sylvester'
INSERT deliveries3 (cust_id)
VALUES (7028)
REVERT
EXECUTE AS USER = 'Alejandro'
INSERT deliveries3 (cust_id)
VALUES (7392)
INSERT deliveries3 (cust_id)
VALUES (7452)
REVERT
GO

La requête suivante sélectionne toutes les informations de la table deliveries3.

SELECT order_id AS 'Order #', cust_id AS 'Customer #', 
   delivery_date AS 'When Delivered', received_shipment 
   AS 'Received By'
FROM deliveries3
ORDER BY order_id
GO

Voici l'ensemble des résultats.

Order #   Customer #  When Delivered       Received By
--------  ----------  -------------------  -----------
5000      7510        2005-03-16 12:02:14  Wanida                        
5001      7231        2005-03-16 12:02:14  Wanida                        
5002      7028        2005-03-16 12:02:14  Sylvester                       
5003      7392        2005-03-16 12:02:14  Alejandro                 
5004      7452        2005-03-16 12:02:14  Alejandro                 

(5 row(s) affected)