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 AdventureWorks2008R2;
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)