SESSION_USER (Transact-SQL)

SESSION_USER gibt den Benutzernamen im Kontext der aktuellen Datenbank zurück.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

SESSION_USER

Rückgabetypen

nvarchar(128)

Hinweise

Verwenden Sie SESSION_USER mit DEFAULT-Einschränkungen in der CREATE TABLE- oder ALTER TABLE-Anweisung oder als beliebige Standardfunktion. SESSION_USER kann in eine Tabelle eingefügt werden, wenn kein Standardwert angegeben wird. Diese Funktion weist keine Argumente auf. SESSION_USER kann in Abfragen verwendet werden.

Wird SESSION_USER nach einem Kontextwechsel aufgerufen, gibt SESSION_USER den Benutzernamen des Kontexts zurück, dessen Identität angenommen wurde.

Beispiele

A. Verwenden von SESSION_USER zur Rückgabe des Benutzernamens der aktuellen Sitzung

Im folgenden Beispiel wird eine Variable als Datentyp nchar deklariert, ihr der aktuelle Wert von SESSION_USER zugewiesen und die Variable dann mit einer Textbeschreibung ausgegeben.

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

Wenn Surya Sitzungsbenutzer ist, sieht das Resultset folgendermaßen aus:

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

(1 row(s) affected)

B. Verwenden von SESSION_USER mit DEFAULT-Einschränkungen

Im folgenden Beispiel wird eine Tabelle erstellt, die SESSION_USER als DEFAULT-Einschränkung für den Namen der Person verwendet, die den Empfang einer Lieferung aufzeichnet.

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

Der Tabelle hinzugefügte Datensätze werden mit dem Benutzernamen des aktuellen Benutzers versehen. Im folgenden Beispiel wird der Empfang von Lieferungen von Wanida, Sylvester und Alejandro überprüft. Dies kann durch Wechseln des Benutzerkontexts mithilfe von EXECUTE AS emuliert werden.

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

In der folgenden Abfrage werden alle Informationen aus der deliveries3-Tabelle ausgewählt.

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

Dies ist das Resultset.

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)