分享方式:


SESSION_USER (Transact-SQL)

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

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 的結果集:

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

(1 row(s) affected)

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

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

加入資料表中的記錄,會印有目前使用者的使用者名稱。 在本範例中,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)