SESSION_USER (Transact-SQL)

現在のデータベースに含まれる現在のコンテキストのユーザー名を返します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

SESSION_USER

戻り値の型

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 行処理されました)

B. SESSION_USER を DEFAULT 制約と共に使用する

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

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

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