SESSION_USER (Transact-SQL)
SESSION_USER retourne le nom d'utilisateur du contexte actuel dans la base de données active.
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 AdventureWorks2008R2;
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)