다음을 통해 공유


SESSION_USER(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

SESSION_USER는 현재 데이터베이스에 있는 현재 컨텍스트의 사용자 이름을 반환합니다.

Transact-SQL 구문 표기 규칙

구문

SESSION_USER  

반환 형식

nvarchar(128)

설명

SESSION_USER를 CREATE TABLE 또는 ALTER TABLE 문에서 DEFAULT 제약 조건으로 사용하거나 임의의 표준 함수로 사용합니다. 지정된 기본값이 없으면 SESSION_USER를 테이블에 삽입할 수 있습니다. 이 함수에는 인수가 필요하지 않습니다. SESSION_USER는 쿼리에서 사용할 수 있습니다.

컨텍스트 전환 후 SESSION_USER를 호출하면 가장된 컨텍스트의 사용자 이름이 반환됩니다.

예제

A. SESSION_USER를 사용하여 현재 세션의 사용자 이름 반환

다음 예에서는 변수를 nchar로 선언하고 이 변수에 SESSION_USER의 현재 값을 할당한 다음 텍스트 설명과 함께 변수를 인쇄합니다.

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

다음은 세션 사용자가 Surya일 때의 결과 집합입니다.

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

(1 row(s) affected)

B. DEFAULT 제약 조건으로 SESSION_USER 사용

다음 예에서는 배송물 수령을 기록하는 사람의 이름에 대한 SESSION_USER 제약 조건으로 DEFAULT를 사용하는 테이블을 만듭니다.

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  

테이블에 추가된 레코드에는 현재 사용자의 사용자 이름이 표시됩니다. 이 예에서 Wanida, SylvesterAlejandro이 배송물 수령을 확인합니다. 이것은 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  

다음 쿼리는 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  

결과 집합은 다음과 같습니다.

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)

예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)

3. SESSION_USER를 사용하여 현재 세션의 사용자 이름 반환

다음 예에서는 현재 세션의 세션 사용자를 반환합니다.

SELECT SESSION_USER;  

참고 항목

ALTER TABLE(Transact-SQL)
CREATE TABLE(Transact-SQL)
CURRENT_TIMESTAMP(Transact-SQL)
CURRENT_USER(Transact-SQL)
SYSTEM_USER(Transact-SQL)
시스템 함수(Transact-SQL)
USER(Transact-SQL)
USER_NAME(Transact-SQL)