分享方式:


USER_NAME (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

從指定的識別碼或目前的用戶名稱傳回資料庫用戶名稱。

Transact-SQL 語法慣例

語法

USER_NAME ( [ ID ] )

引數

識別碼

與資料庫使用者相關聯的標識碼,如sys.database_principals所示標識碼int。需要括弧。

傳回類型

nvarchar(128)

備註

當省略標識符,會假設目前內容中的目前使用者。 如果 參數包含 這個字 NULLUSER_NAME 將會傳回 NULL。 呼叫 時USER_NAME,而不指定 語句之後EXECUTE AS的標識符,USER_NAME傳回模擬用戶的名稱。 如果 Windows 主體透過群組中的成員資格存取資料庫, USER_NAME 則傳回 Windows 主體的名稱,而不是群組。

USER_NAME()雖然 Azure SQL 資料庫 支援函式,但 Azure SQL 資料庫 不支援使用 EXECUTE AS USER = USER_NAME(n)

範例

A. 使用 USER_NAME() 來識別使用者標識碼

下列範例會傳回使用者標識碼13的用戶名稱,如sys.database_principals所示

SELECT USER_NAME(13);  
GO  

B. 不使用標識碼USER_NAME

下列範例不指定識別碼來尋找目前使用者的名稱。

SELECT USER_NAME();  
GO  

使用者是系統管理員 (sysadmin) 固定伺服器角色成員的結果集如下:

dbo  

C. 在 WHERE 子句中使用USER_NAME

下列範例會尋找 中的數據 sys.database_principals列,其中的名稱等於將系統函 USER_NAME 式套用至使用者標識碼 1的結果。

SELECT name FROM sys.database_principals WHERE name = USER_NAME(1);  
GO  

結果集如下所示。

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

D. 使用 EXECUTE AS 模擬期間呼叫USER_NAME

下列範例會顯示 USER_NAME 在模擬期間的行為方式。

EXECUTE AS 目前不支援 Microsoft Fabric。

警告

使用 EXECUTE AS進行測試時,請一律編寫要遵循的腳本 REVERT

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. 不使用標識碼USER_NAME

下列範例不指定識別碼來尋找目前使用者的名稱。

SELECT USER_NAME();  

以下為目前登入使用者的結果集。

User7                              

F. 在 WHERE 子句中使用USER_NAME

下列範例會在 sysusers 中尋找資料列,這個資料列名稱等於套用系統函數 USER_NAME 至使用者識別碼 1 所得的結果。

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

結果集如下所示。

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