CURRENT_USER (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

此函数返回当前用户的名称。 此函数等效于 USER_NAME()

Transact-SQL 语法约定

语法

CURRENT_USER  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

返回类型

sysname

备注

CURRENT_USER 返回当前安全上下文的名称。 如果在 EXECUTE AS 的调用切换上下文后执行 CURRENT_USERCURRENT_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 作为销售行上 DEFAULT 列的 order_person 约束。

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)