Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Tabla de auditoria SQl server 2005

Estas en el tema de Tabla de auditoria SQl server 2005 en el foro de SQL Server en Foros del Web. Buen día. agradecería su ayuda, mi duda es la siguiente: estoy trabajando con sql server 2005, y necesito hacer tabla de auditoria y me surge ...
  #1 (permalink)  
Antiguo 02/06/2011, 08:40
Avatar de zadkiel88  
Fecha de Ingreso: mayo-2011
Mensajes: 14
Antigüedad: 12 años, 10 meses
Puntos: 1
Exclamación Tabla de auditoria SQl server 2005

Buen día.

agradecería su ayuda, mi duda es la siguiente:

estoy trabajando con sql server 2005, y necesito hacer tabla de auditoria y me surge el siguiente problema:

tengo la tabla usuarios y la tabla de auditoria es AUDIT.

1. creo el trigger en sql server:

CREATE TRIGGER AUDITupdc ON dbo.usuarios
INSTEAD OF UPDATE
AS
declare
@id int,
@usua varchar(50),
@inse varchar(50),
@fech datetime,
@regi varchar(50),
@sist varchar(50),
@host varchar(50),
@app varchar(50),
@usua2 varchar(50)

IF UPDATE(descripcion)
BEGIN
select
@inse = 'Edit',
@fech = getdate(),
@regi = 'Edicion de registro',
@sist = SYSTEM_USER,
@host = host_name(),
@app = APP_NAME(),
@id = Cli.cedula,
@usua = Cli.descripcion,
@usua2 = Ins.descripcion
From inserted Cli INNER JOIN usuarios Ins ON Ins.cedula = Cli.cedula

WHERE
EXISTS(SELECT
cedula,
descripcion
FROM dbo.usuarios Ins
WHERE Ins.cedula = Cli.cedula)

insert into AUDIT
VALUES (@inse,@fech,@regi,@sist,@host,@app,@id,@usua,@usu a2)

UPDATE dbo.usuarios SET descripcion = @usua WHERE cedula = @id



2. UPDATE dbo.usuarios SET descripcion = 'usuario1' WHERE cedula = '102447654' , este es el update que reazlizo.



- el trigger funciona y me envia la informacion a la tabla de auditoria, pero como pueden en ver en la ultima linea del punto uno(1.)tengo q especificar de nuevo el update ya que cuando realizo el update (2.) no me modifica la tabla, solo envia la informacion a la tabla de auditoria pero no modifica, me vi en la necesidad de colocar el update en el trigger.

la pregunta es: es necesario colocar el update en el trigger, o por que razón no edita cuando envió el update una vez.

gracias.
  #2 (permalink)  
Antiguo 02/06/2011, 09:53
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Tabla de auditoria SQl server 2005

No puedes hacer un UDPATE dentro de tu trigger, a la misma tabla para la cual fue credo (el trigger), ¿eso es lo que quieres?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 02/06/2011, 10:23
Avatar de zadkiel88  
Fecha de Ingreso: mayo-2011
Mensajes: 14
Antigüedad: 12 años, 10 meses
Puntos: 1
Sonrisa Respuesta: Tabla de auditoria SQl server 2005

Cita:
Iniciado por iislas Ver Mensaje
No puedes hacer un UDPATE dentro de tu trigger, a la misma tabla para la cual fue credo (el trigger), ¿eso es lo que quieres?
hola, el update dentro del trigger me toco ponerlo. ya que sin ese update dentro del trigger al realizar el update como consulta nueva ejemplo:
UPDATE dbo.usuarios SET descripcion = 'usuario1' WHERE cedula = '102447654'
el trigger me envía los parámetros a la tabla de auditoria, pero la tabla usuarios no se modificaba.

entonces: con ese update en el trigger funciona bn. pero no se si sea la forma correcta de usar triggers, ya que si quito ese update no funciona por que no realiza la modificacion solo llena la tabala de auditoria.

si no es correcto usar ese update dentro del trigger que prodria usar para corregir el problema para que me edite la tabla.
  #4 (permalink)  
Antiguo 02/06/2011, 10:34
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Tabla de auditoria SQl server 2005

Por pura logica, si colocas un UPDATE dentro de tu trigger que hace mencion a la misma tabla en cuestion, estas generando un ENCADENAMIENTO.

Ahora bien, tu trigger, esta dondicionado solo a que se ejectue SI Y SOLO SI, hay una modificacion a tu campo descripcion

IF UPDATE(descripcion)
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 02/06/2011, 12:40
Avatar de zadkiel88  
Fecha de Ingreso: mayo-2011
Mensajes: 14
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Tabla de auditoria SQl server 2005

mmm entiendo, pero por que cuando realizo el update no se modifica la tabla?
  #6 (permalink)  
Antiguo 16/06/2011, 06:28
 
Fecha de Ingreso: junio-2011
Mensajes: 2
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Tabla de auditoria SQl server 2005

Aqui tu problema parece ser que utilizaste un trigger "INSTEAD OF" (quiere decir en vez de), lo que sucede es que al usar éste tipo de triggers NO se ejecuta la sentencia UPDATE que lo dispara, por ello debes hacer el UPDATE tú dentro del trigger (si que puedes hacer un update dentro de un trigger de update, solo debes verificar dentro de la configuracion de tu servidor SQL si aceptas triggers recursivos o no). A mi entender no deberias usar un un INSTEAD OF, sino mas bien un trigger AFTER UPDATE. Dé esta menera, la auditoria se ejecutaria luego de la insercion de los valores por la clausula UPDATE, la cual teendría efecto; al contrario que en el INSTEAD OF en el cual la clausula UPDATE que lo dispara no tiene efecto.
  #7 (permalink)  
Antiguo 16/06/2011, 11:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Tabla de auditoria SQl server 2005

chgalvez, difiero de la opinion de los "triggers recursivos", por otro lado, los triggers, desde un inicio fueron creados exclusivamente para el resguardo del DRI, no para una programacion de logica.

Saludos
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 18/07/2011, 19:21
 
Fecha de Ingreso: junio-2011
Mensajes: 2
Antigüedad: 12 años, 10 meses
Puntos: 0
Información Respuesta: Tabla de auditoria SQl server 2005

Cita:
Iniciado por iislas Ver Mensaje
chgalvez, difiero de la opinion de los "triggers recursivos", por otro lado, los triggers, desde un inicio fueron creados exclusivamente para el resguardo del DRI, no para una programacion de logica.

Saludos
Difiere si quieres; pero está en los libros en pantalla de sql server 2005, y yo lo uso asi. Quizas te choque el termino "recursivo", pero es el termino que ellos utilizan para cuando un trigger dispara otro trigger, o se dispara a si mismo. Incluso habla de un limite de 32 llamadas recursivas.
  #9 (permalink)  
Antiguo 18/07/2011, 22:14
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Tabla de auditoria SQl server 2005

De acuerdo NESTED TRIGGER, RECURSIVE TRIGGER.

Pero como bien te comento, los triggers, no son para programacion de logica.

Saludos (y no me choca)
__________________
MCTS Isaias Islas

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:55.