分享方式:


CURRENT_USER (Transact-SQL)

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

此函式會傳回目前使用者的名稱。 此函式相當於 USER_NAME()

Transact-SQL 語法慣例

語法

CURRENT_USER  

傳回類型

sysname

備註

CURRENT_USER 會傳回目前安全性內容的名稱。 如果 CURRENT_USER 是在呼叫 EXECUTE AS 參數內容之後執行,CURRENT_USER 就會傳回模擬內容的名稱。 如果 Windows 主體利用群組中的成員資格來存取資料庫,則 CURRENT_USER 會傳回 Windows 主體名稱而非群組名稱。

請參閱 SUSER_NAME (Transact-SQL)SYSTEM_USER (Transact-SQL),以了解如何傳回目前使用者的登入。

範例

A. 使用 CURRENT_USER 傳回目前使用者的名稱

此範例會傳回目前使用者的名稱。

SELECT CURRENT_USER;  
GO  

B. 使用 CURRENT_USER 做為 DEFAULT 條件約束

此範例會建立一份資料表,利用 CURRENT_USER 作為銷售資料列之 order_person 資料行的 DEFAULT 條件約束。

USE AdventureWorks2022;  
GO  
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES  
      WHERE TABLE_NAME = 'orders22')  
   DROP TABLE orders22;  
GO  
SET NOCOUNT ON;  
CREATE TABLE orders22  
(  
order_id int IDENTITY(1000, 1) NOT NULL,
cust_id  int NOT NULL,
order_date smalldatetime NOT NULL DEFAULT GETDATE(),
order_amt money NOT NULL,
order_person char(30) NOT NULL DEFAULT CURRENT_USER
);  
GO  

此範例會在資料表中插入一筆記錄。 名為 Wanida 的使用者會執行這些陳述式。

INSERT orders22 (cust_id, order_amt)  
VALUES (5105, 577.95);  
GO  
SET NOCOUNT OFF;  
GO  

此查詢會選取 orders22 資料表中的所有資訊。

SELECT * FROM orders22;  
GO  

結果集如下所示。

order_id    cust_id     order_date           order_amt    order_person
----------- ----------- -------------------- ------------ ------------
1000        5105        2005-04-03 23:34:00  577.95       Wanida
  
(1 row(s) affected)

C. 使用模擬內容的 CURRENT_USER

在此範例中,使用者 Wanida 會執行下列 Transact-SQL 程式碼,來模擬使用者 'Arnalfo'。

SELECT CURRENT_USER;  
GO  
EXECUTE AS USER = 'Arnalfo';  
GO  
SELECT CURRENT_USER;  
GO  
REVERT;  
GO  
SELECT CURRENT_USER;  
GO  

結果集如下所示。

Wanida
Arnalfo
Wanida

另請參閱

USER_NAME (Transact-SQL)
SYSTEM_USER (Transact-SQL)
sys.database_principals (Transact-SQL)
ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
系統函數 (Transact-SQL)