Condividi tramite


SESSION_USER (Transact-SQL)

SESSION_USER restituisce il nome utente del contesto corrente nel database corrente.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

SESSION_USER

Tipi restituiti

nvarchar(128)

Osservazioni

Utilizzare la funzione SESSION_USER con vincoli DEFAULT nell'istruzione CREATE TABLE o ALTER TABLE oppure come qualsiasi funzione standard. SESSION_USER può essere inserita in una tabella se non viene specificato alcun valore predefinito. Questa funzione non accetta argomenti e può essere utilizzata nelle query.

Se viene chiamata dopo un cambio di contesto, la funzione SESSION_USER restituirà il nome utente del contesto rappresentato.

Esempi

A. Utilizzo di SESSION_USER per recuperare il nome utente della sessione corrente

Nell'esempio seguente viene dichiarata una variabile di tipo nchar, viene assegnato il valore corrente di SESSION_USER a tale variabile e quindi vengono restituite la variabile e una descrizione.

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

Di seguito è riportato il set di risultati quando l'utente della sessione è Surya:

--------------------------------------------------------------

L'utente corrente di questa sessione è Surya

(Righe interessate: 1)

B. Utilizzo della funzione SESSION_USER con vincoli DEFAULT

Nell'esempio seguente viene creata una tabella che utilizza SESSION_USER come vincolo DEFAULT per il nome della persona che registra la ricezione di una spedizione.

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

I record aggiunti alla tabella verranno contrassegnati con il nome utente dell'utente corrente. In questo esempio la ricezione delle spedizioni viene verificata da Wanida, Sylvester e Alejandro. Questo scenario può essere simulato mediante un cambio di contesto utente tramite 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 query seguente consente di selezionare tutte le informazioni della tabella 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

Set di risultati:

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

(Righe interessate: 5)