SYSTEM_USER (Transact-SQL)

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

当未指定默认值时,允许将系统为当前登录名提供的值插入表中。

Transact-SQL 语法约定

语法

SYSTEM_USER  

注意

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

返回类型

nvarchar(128)

注解

您可以在 CREATE TABLE 和 ALTER TABLE 语句中将 SYSTEM_USER 函数与 DEFAULT 约束一起使用。 还可以将此函数用作任意标准函数。

如果用户名与登录名不同,则 SYSTEM_USER 返回登录名。

如果当前用户使用 Windows 身份验证登录到 SQL Server,则 SYSTEM_USER 返回如下形式的 Windows 登录标识名称:DOMAIN\user_login_name 。 但是,如果当前用户使用 SQL Server 身份验证登录到 SQL Server,则 SYSTEM_USER 返回 SQL Server 登录标识名称,例如为作为 WillisJo 登录的用户返回 WillisJo

SYSTEM_USER 返回当前执行的上下文的名称。 如果已使用 EXECUTE AS 语句进行上下文切换,则 SYSTEM_USER 将返回模拟的上下文的名称。

执行身份不能为 SYSTEM_USER。

Azure SQL 数据库:SYSTEM_USER 语句不支持通过 EXECUTE AS 使用模拟安全上下文执行。

示例

A. 使用 SYSTEM_USER 返回当前系统用户名

以下示例声明变量 char,在该变量中存储 SYSTEM_USER 的当前值,然后打印该变量中存储的值。

DECLARE @sys_usr CHAR(30);  
SET @sys_usr = SYSTEM_USER;  
SELECT 'The current system user is: '+ @sys_usr;  
GO  

下面是结果集:

----------------------------------------------------------
The current system user is: WillisJo

(1 row(s) affected)

B. 将 SYSTEM_USER 与 DEFAULT 约束一起使用

以下示例创建一个表,其中 SYSTEM_USER 作为 DEFAULT 列的 SRep_tracking_user 约束。

USE AdventureWorks2022;  
GO  
CREATE TABLE Sales.Sales_Tracking  
(  
    Territory_id INT IDENTITY(2000, 1) NOT NULL,  
    Rep_id INT NOT NULL,  
    Last_sale DATETIME NOT NULL DEFAULT GETDATE(),  
    SRep_tracking_user VARCHAR(30) NOT NULL DEFAULT SYSTEM_USER  
);  
GO  
INSERT Sales.Sales_Tracking (Rep_id)  
VALUES (151);  
INSERT Sales.Sales_Tracking (Rep_id, Last_sale)  
VALUES (293, '19980515');  
INSERT Sales.Sales_Tracking (Rep_id, Last_sale)  
VALUES (27882, '19980620');  
INSERT Sales.Sales_Tracking (Rep_id)  
VALUES (21392);  
INSERT Sales.Sales_Tracking (Rep_id, Last_sale)  
VALUES (24283, '19981130');  
GO  

以下查询选择 Sales_Tracking 表中的全部信息:

SELECT * FROM Sales_Tracking ORDER BY Rep_id;  
GO  

下面是结果集。

Territory_id Rep_id Last_sale            SRep_tracking_user
-----------  ------ -------------------- ------------------
2000         151    Mar 4 1998 10:36AM   ArvinDak
2001         293    May 15 1998 12:00AM  ArvinDak
2003         21392  Mar 4 1998 10:36AM   ArvinDak
2004         24283  Nov 3 1998 12:00AM   ArvinDak
2002         27882  Jun 20 1998 12:00AM  ArvinDak
 
(5 row(s) affected)

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

C. 使用 SYSTEM_USER 返回当前系统用户名

以下示例返回 SYSTEM_USER 的当前值。

SELECT SYSTEM_USER;  

另请参阅

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