SYSTEM_USER (Transact-SQL)
Permite insertar en una tabla un valor proporcionado por el sistema para el inicio de sesión actual cuando no se especifica ningún valor predeterminado.
Convenciones de sintaxis de Transact-SQL
Sintaxis
SYSTEM_USER
Tipos de valor devueltos
nchar
Comentarios
En las instrucciones CREATE TABLE y ALTER TABLE puede utilizar la función SYSTEM_USER con restricciones DEFAULT. También puede utilizarla como cualquier función estándar.
Si el nombre de usuario y el nombre de inicio de sesión con diferentes, SYSTEM_USER devuelve el nombre de inicio de sesión.
Si el usuario actual ha iniciado la sesión en SQL Server con la autenticación de Windows, SYSTEM_USER devuelve el nombre de identificación del inicio de sesión de Windows con el formato: DOMAIN\user_login_name. Sin embargo, si el usuario actual ha iniciado la sesión en SQL Server con la autenticación de SQL Server, SYSTEM_USER devuelve el nombre de identificación de inicio de sesión en SQL Server, por ejemplo WillisJo para un usuario que ha iniciado la sesión como WillisJo.
SYSTEM_USER devuelve el nombre del contexto de ejecución actual. Si se ha usado la instrucción EXECUTE AS para cambiar el contexto, SYSTEM_USER devuelve el nombre del contexto suplantado.
Ejemplos
A.Usar SYSTEM_USER para devolver el nombre de usuario actual del sistema
En el siguiente ejemplo se declara una variable char, se almacena en ella el valor actual de SYSTEM_USER y, a continuación, se imprime el valor almacenado en la variable.
DECLARE @sys_usr char(30);
SET @sys_usr = SYSTEM_USER;
SELECT 'The current system user is: '+ @sys_usr;
GO
El conjunto de resultados es el siguiente.
----------------------------------------------------------
The current system user is: WillisJo
(1 row(s) affected)
B.Usar SYSTEM_USER con restricciones DEFAULT
En el siguiente ejemplo se crea una tabla con SYSTEM_USER como una restricción DEFAULT para la columna SRep_tracking_user.
USE AdventureWorks2012;
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
En la siguiente consulta se selecciona toda la información de la tabla Sales_Tracking:
SELECT * FROM Sales_Tracking ORDER BY Rep_id;
GO
El conjunto de resultados es el siguiente.
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)
Vea también
Referencia
CURRENT_TIMESTAMP (Transact-SQL)