Sdílet prostřednictvím


SESSION_USER (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

SESSION_USER vrací uživatelské jméno aktuálního kontextu v aktuální databázi.

Transact-SQL konvence syntaxe

Syntaxe

SESSION_USER  

Návratové typy

nvarchar(128)

Poznámky

Použijte SESSION_USER s omezeními DEFAULT buď v příkazech CREATE TABLE nebo ALTER TABLE, nebo je použijte jako jakoukoli standardní funkci. SESSION_USER lze vložit do tabulky, pokud není zadána výchozí hodnota. Tato funkce nepřijímá žádné argumenty. SESSION_USER lze použít v dotazech.

Pokud je SESSION_USER vyvolán po přepnutí kontextu, SESSION_USER vrátí uživatelské jméno impersonovaného kontextu.

Examples

A. Použitím SESSION_USER k vrácení uživatelského jména aktuální relace

Následující příklad deklaruje proměnnou jako nchar, přiřadí aktuální hodnotu této SESSION_USER proměnné a poté vytiskne proměnnou s textovým popisem.

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

Toto je množina výsledků, když uživatel relace je Surya:

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

(1 row(s) affected)

B. Použití SESSION_USER s VÝCHOZÍMI omezeními

Následující příklad vytváří tabulku, která používá SESSION_USER jako DEFAULT omezení jméno osoby, která zaznamenává přijetí zásilky.

USE AdventureWorks2022;  
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  

Záznamy přidané do tabulky budou označeny uživatelským jménem aktuálního uživatele. V tomto příkladu , WanidaSylvester, a ověřte Alejandro přijetí zásilek. To lze emulovat přepnutím uživatelského kontextu pomocí 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  

Následující dotaz vybírá všechny informace z tabulky 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  

Tady je soubor výsledků.

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)

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

C: Používám SESSION_USER k vrácení uživatelského jména aktuální relace

Následující příklad vrací uživatele relace pro aktuální relaci.

SELECT SESSION_USER;  

Viz také

ZMĚNIT TABULKU (Transact-SQL)
VYTVOŘIT TABULKU (Transact-SQL)
CURRENT_TIMESTAMP (Transact-SQL)
CURRENT_USER (Transact-SQL)
SYSTEM_USER (Transact-SQL)
Systémové funkce (Transact-SQL)
UŽIVATEL (Transact-SQL)
USER_NAME (Transact-SQL)