Поделиться через


SESSION_USER (Transact-SQL)

Функция SESSION_USER возвращает имя пользователя текущего контекста в текущей базе данных.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

SESSION_USER

Типы возвращаемых данных

nvarchar(128)

Замечания

Функция SESSION_USER с ограничением DEFAULT используется в инструкциях CREATE TABLE или ALTER TABLE, либо как любая стандартная функция. Функцию 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:

--------------------------------------------------------------

Текущий пользователь этого сеанса: Surya

(Обработано строк: 1)

Б. Использование функции SESSION_USER с ограничениями DEFAULT

В следующем примере создается таблица, которая использует 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)