SESSION_USER (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SESSION_USER では現在のデータベースに含まれる現在のコンテキストのユーザー名が返されます。

Transact-SQL 構文表記規則

構文

SESSION_USER  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

戻り値の型

nvarchar(128)

注釈

SESSION_USER は、DEFAULT 制約と共に CREATE TABLE または ALTER TABLE ステートメント内で使用するか、標準の関数として使用します。 SESSION_USER は、既定値が指定されていなければテーブルに挿入できます。 この関数は引数を取りません。 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. SESSION_USER を DEFAULT 制約と共に使用する

次の例では、荷物の受領記録者の名前に対し、SESSION_USERDEFAULT 制約として使用するテーブルを作成します。

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  

テーブルに追加されたレコードに対して、現在のユーザーのユーザー名が設定されます。 この例では、WanidaSylvesterAlejandro が荷物の受領を確認します。 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、Analytics Platform System (PDW)

C. 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)