SESSION_USER (Transact-SQL)

SESSION_USER 返回当前数据库中当前上下文的用户名。

主题链接图标Transact-SQL 语法约定

语法

SESSION_USER

返回类型

nvarchar(128)

注释

SESSION_USER 可在 CREATE TABLE 或 ALTER TABLE 语句中与 DEFAULT 约束一起使用,或者将它用作任何标准函数。如果没有指定默认值,可以将 SESSION_USER 插入表中。此函数没有参数。SESSION_USER 可以在查询中使用。

如果在切换上下文之后调用 SESSION_USER,SESSION_USER 将返回模拟上下文的用户名。

示例

A. 使用 SESSION_USER 返回当前会话的用户名

以下示例将变量声明为 nchar,然后将当前值 SESSION_USER 分配给该变量,再与文本说明一起打印此变量。

DECLARE @session_usr nchar(30);
SET @session_usr = SESSION_USER;
SELECT 'This session''s current user is: '+ @session_usr;
GO

这是会话用户为 Surya 时的结果集:

-------------------------------------------------------------- 
This session's current user is: Surya                            

(1 row(s) affected)

B. 与 DEFAULT 约束一起使用 SESSION_USER

以下示例创建一个表,该表使用 SESSION_USER 作为记录发货回执者的名字的 DEFAULT 约束。

USE AdventureWorks
GO
CREATE TABLE deliveries3
(
 order_id int IDENTITY(5000, 1) NOT NULL,
 cust_id  int NOT NULL,
 order_date smalldatetime NOT NULL DEFAULT GETDATE(),
 delivery_date smalldatetime NOT NULL DEFAULT 
    DATEADD(dd, 10, GETDATE()),
 received_shipment nchar(30) NOT NULL DEFAULT SESSION_USER
)
GO

添加到表中的记录将以当前用户的用户名为戳记。在此示例中,Wanida、Sylvester 和 Alejandro 将验证发货的回执。这可以通过使用 EXECUTE AS 来切换用户上下文进行模拟。

EXECUTE AS USER = 'Wanida'
INSERT deliveries3 (cust_id)
VALUES (7510)
INSERT deliveries3 (cust_id)
VALUES (7231)
REVERT
EXECUTE AS USER = 'Sylvester'
INSERT deliveries3 (cust_id)
VALUES (7028)
REVERT
EXECUTE AS USER = 'Alejandro'
INSERT deliveries3 (cust_id)
VALUES (7392)
INSERT deliveries3 (cust_id)
VALUES (7452)
REVERT
GO

下面的查询从 deliveries3 表中选择所有信息。

SELECT order_id AS 'Order #', cust_id AS 'Customer #', 
   delivery_date AS 'When Delivered', received_shipment 
   AS 'Received By'
FROM deliveries3
ORDER BY order_id
GO

下面是结果集。

Order #   Customer #  When Delivered       Received By
--------  ----------  -------------------  -----------
5000      7510        2005-03-16 12:02:14  Wanida                        
5001      7231        2005-03-16 12:02:14  Wanida                        
5002      7028        2005-03-16 12:02:14  Sylvester                       
5003      7392        2005-03-16 12:02:14  Alejandro                 
5004      7452        2005-03-16 12:02:14  Alejandro                 

(5 row(s) affected)