USER_NAME (Transact-SQL)

适用于: SQL Server(所有受支持的版本) Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

根据指定的标识号返回数据库用户名。

Article link iconTransact-SQL 语法约定

语法

USER_NAME ( [ id ] )  

注意

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

参数

id
与数据库用户关联的标识号。 id 的数据类型为 int。需要使用括号。

返回类型

nvarchar(128)

注解

省略 id 时,则假定为当前上下文中的当前用户。 如果此参数包含词 NULL,将返回 NULL。 如果在 EXECUTE AS 语句之后调用 USER_NAME,但不指定 id,则 USER_NAME 将返回模拟用户的名称。 如果 Windows 主体通过某组中的成员身份访问数据库,则 USER_NAME 将返回 Windows 主体的名称,而不是该组的名称。

备注

尽管 Azure SQL 数据库支持 USER_NAME,但 Azure SQL 数据库不支持使用 USER_NAME 的 Execute as。

示例

A. 使用 USER_NAME

以下示例将返回用户 ID 为 13 的用户名。

SELECT USER_NAME(13);  
GO  

B. 使用不指定 ID 的 USER_NAME

以下示例在不指定 ID 的情况下查找当前用户的名称。

SELECT USER_NAME();  
GO  

下面是为属于 sysadmin 固定服务器角色成员的用户返回的结果集。

------------------------------  
dbo  
 
(1 row(s) affected)

C. 在 WHERE 子句中使用 USER_NAME

以下示例在 sysusers 中查找行,该行的名称与将 USER_NAME 系统函数应用于用户标识号 1 而得出的结果相同。

SELECT name FROM sysusers WHERE name = USER_NAME(1);  
GO  

下面是结果集。

name  
------------------------------  
dbo  
 
(1 row(s) affected)

D. 在使用 EXECUTE AS 的模拟过程中调用 USER_NAME

以下示例显示模拟过程中 USER_NAME 的行为方式。

SELECT USER_NAME();  
GO  
EXECUTE AS USER = 'Zelig';  
GO  
SELECT USER_NAME();  
GO  
REVERT;  
GO  
SELECT USER_NAME();  
GO  

下面是结果集。

DBO  
Zelig  
DBO

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

E. 使用不指定 ID 的 USER_NAME

以下示例在不指定 ID 的情况下查找当前用户的名称。

SELECT USER_NAME();  

下面是当前登录用户的结果集。

------------------------------   
User7                              

F. 在 WHERE 子句中使用 USER_NAME

以下示例在 sysusers 中查找行,该行的名称与将 USER_NAME 系统函数应用于用户标识号 1 而得出的结果相同。

SELECT name FROM sysusers WHERE name = USER_NAME(1);  

下面是结果集。

name                             
------------------------------   
User7                              

另请参阅

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
CURRENT_TIMESTAMP (Transact-SQL)
CURRENT_USER (Transact-SQL)
SESSION_USER (Transact-SQL)
系统函数 (Transact-SQL)
SYSTEM_USER (Transact-SQL)