Usuário com melhor resposta
Dúvida - Criação de Trigger pegar nome do usuário

Pergunta
-
Bom dia a todos!
Amigos, estou criando uma trigger que seria no caso uma trigger para alimentar uma tabela de LOG do meu sistema ERP.
A idéia é a seguinte:
- Quando o usuário inserir o os dados na tabela ITEM_CONTRATO essa trigger deve disparar e alimentar a tabela de usuário chamada de USERTabelaLog com os campos Código, Data Atual, Usuário.
Bom, até ai está tudo tranquilo, o único problema que estou enfrentando é que o nome do usuário quando insere uma informação é o unico campo que não consigo pegar para preencher. Surgiu a dúvida se talvez no momento que está inserindo uma informação de insert o nome do usuario fique registrado em alguma tabela de sistemas que eu possa pegar e jogar no insert da minha trigger.
Segue os códigos:
Code Snippetcreate table USERTabelaLog(
Codigo int IDENTITY,
Data datetime,Usuario varchar(30),
primary key (Codigo)
)create trigger USERTrigerItemContrato
on ITEM_CONTRATO
for insert
as
declare @data datetimeset @data = GETDATE()
insert into USERTabelaLog values (@data,@Usuario)
GOCom a trigger acima eu consigo inserir o registro IDENTITY e a data atual, porém o usuario nao sei da onde pegar isso... será que alguma sp_algumacoisadesistema eu conseguiria pegar o nome do user???
Abraço a todos!
Desde já agradeço
Clayton Santos
Respostas
-
Clayton,
Você poderia utilizar as funções:
-
Current_User --> equivalente a User_Name();
-
User_Name() --> retorna o nome do usuário conectado ao banco de dados, de acordo com id especificado;
-
Session_User --> retorna o nome do usuário de acordo com o contexto de banco de dados;
-
Suser_Name() --> retorna o nome do usuário;
-
Suser_ID() --> retorna o identificador do login associado ao nome do usuário;
-
Suser_SID() --> retorna o SID associado ao nome do login;
-
Suser_SName() --> retorna o nome do login associado ao SID;
-
System_User --> retorna o nome do login no banco de dados corrrente, de acordo com as informações na system tables sys.sysusers dentro do atual conectado.User --> retorna o nome do usuário no banco de dados corrrente, de acordo com as informações na system tables sys.sysusers dentro do atual conectado.
Você pode utilizar também a table sys.sysusers, para obter informaçõe dos usuários.
Veja qual destas pode te ajudar melhor, na utilização do trigger.
-
Todas as Respostas
-
Clayton,
Você poderia utilizar as funções:
-
Current_User --> equivalente a User_Name();
-
User_Name() --> retorna o nome do usuário conectado ao banco de dados, de acordo com id especificado;
-
Session_User --> retorna o nome do usuário de acordo com o contexto de banco de dados;
-
Suser_Name() --> retorna o nome do usuário;
-
Suser_ID() --> retorna o identificador do login associado ao nome do usuário;
-
Suser_SID() --> retorna o SID associado ao nome do login;
-
Suser_SName() --> retorna o nome do login associado ao SID;
-
System_User --> retorna o nome do login no banco de dados corrrente, de acordo com as informações na system tables sys.sysusers dentro do atual conectado.User --> retorna o nome do usuário no banco de dados corrrente, de acordo com as informações na system tables sys.sysusers dentro do atual conectado.
Você pode utilizar também a table sys.sysusers, para obter informaçõe dos usuários.
Veja qual destas pode te ajudar melhor, na utilização do trigger.
-
-
-
Galvão você é o melhor!!!
Deu certinho o que preciso!!! O melhor que se encaixou pra mim foi os ultimos dois que me passou.
Code Snippetselect Suser_SName()
select System_UserEle pegou o ID do Windows e como todos os usuários aqui da empresa logam dentro do dominio e nenhum através do login do SQL Server então se encaixou perfeitamente no que preciso.
A solução pro meu caso ficou assim:
Code Snippetcreate table USERLogSysItemContrato(
Codigo int IDENTITY,
Data datetime,
Usuario varchar(30),primary key (Codigo)
)--Ao inserir um item na tabela ITEM_CONTRATO a trigger insere as informações do código sequencial, a data atual e o usuario atual. Objetivo utilizar para controle de informações inseridas na tabela por usuario. Tabela de LOG.
create trigger USERTrigerItemContrato
on ITEM_CONTRATO
for insert
as
declare @data datetime
declare @Usuario varchar(30)set @data = GETDATE() --Data/Hora atual
set @Usuario = (select System_User) --Usuario atualinsert into USERLogSysItemContrato values (@data,@Usuario)
GOResultado:
Code SnippetCodigo Data Usuario
---------- ----------------------- --------------1 2008-07-30 09:11:17.610 PLANUS\csantos
2 2008-07-30 09:13:27.557 PLANUS\csantos
3 2008-07-30 09:19:48.423 PLANUS\csantos(3 row(s) affected)
Obrigado!!!
Clayton Santos
-
-
Boa tarde a todos.
Aproveitando a duvida do nosso amigo, gostaria de saber como pegar os dados que fiz update no banco e jogar em outra tabela.
eh bem parecido com a duvida deste topico, a diferença é que eu queria pegar todos os dados desta "linha" e replicar em outra tabela. Alguem tem um exemplo de como isso funcionaria?
ai embaixo esta meu codigo, mas nao funcionou.
CREATE TRIGGER replicante ON dbo.JobInformation for update AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; INSERT INTO BilhetagemIddeia.dbo.JobInformation( Date, UserJob, DocumentName, Path, JobId, JobPrinterDriverName, JobPrinterObjectName, JobPrinterPortName, JobPrinterShareName, JobSizeInBytes, JobColor, JobTotalPages, JobNumCopies, JobDuplex, JobOrientation, JobPrintQuality, JobPaperSizeName, Status, DeletedTime, NumPages, NumPaper, PrintedTime, PrinterModel, PrinterSerialNumber, PrinterAddress) values ( Declare @Date, select UserJob from inserted, select DocumentName from inserted, select Path from inserted, select JobId from inserted, select JobPrinterDriverName from inserted, select JobPrinterObjectName from inserted, select JobPrinterPortName from inserted, select JobPrinterShareName from inserted, select JobSizeInBytes from inserted, select JobColor from inserted, select JobTotalPages from inserted select JobNumCopies from inserted, select JobDuplex from inserted, select JobOrientation from inserted, select JobPrintQuality from inserted, select JobPaperSizeName from inserted, select Status from inserted, select DeletedTime from inserted, select NumPages from inserted, select NumPaper from inserted, select PrintedTime from inserted, select PrinterModel from inserted, select PrinterSerialNumber from inserted, select PrinterAddress from inserted) END GO
Obrigado a todos