Share via


SESSION_USER (Transact-SQL)

SESSION_USER 會傳回目前資料庫中目前內容的使用者名稱。

主題連結圖示Transact-SQL 語法慣例

語法

SESSION_USER

傳回類型

nvarchar(128)

備註

請在 CREATE TABLE 或 ALTER TABLE 陳述式中,搭配 DEFAULT 條件約束使用 SESSION_USER,或者將它作為任何標準函數使用。如果未指定預設值,可將 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 的結果集:

--------------------------------------------------------------

此工作階段的目前使用者:Surya

(1 個資料列受到影響)

B. 搭配 DEFAULT 條件約束來使用 SESSION_USER

下列範例會建立一份資料表,針對記錄出貨回條者的名稱,利用 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 個資料列受到影響)