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

For update

Estas en el tema de For update en el foro de SQL Server en Foros del Web. Estoy Realizando el siguiente Trigger, IF (UPDATE(a) or UPDATE(b)) BEGIN INSERT INTO tabla(fecha, a, b) SELECT getdate(), a, b FROM deleted END Todo funciona bien ...
  #1 (permalink)  
Antiguo 17/08/2010, 16:30
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 1 mes
Puntos: 1
Pregunta For update

Estoy Realizando el siguiente Trigger,

IF (UPDATE(a) or UPDATE(b))
BEGIN
INSERT INTO tabla(fecha, a, b)
SELECT getdate(), a, b
FROM deleted
END

Todo funciona bien pero me crea el Registro con los datos que tenia Antes de Modificar no los que Actualize.

como puedo tomar los datos que se actualizaron???

Saludos y Gracias
  #2 (permalink)  
Antiguo 17/08/2010, 16:46
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: For update

La primera tabla (inserted) solo está disponible en las operaciones INSERT y UPDATE y en ella están los valores resultantes despues de la inserción o actualización. Es decir, los datos insertados. Inserted estará vacia en una operación DELETE.

En la segunda (deleted), disponible en las operaciones UPDATE y DELETE, están los valores anteriores a la ejecución de la actualización o borrado. Es decir, los datos que serán borrados. Deleted estará vacia en una operacion INSERT.

¿No existe una tabla UPDATED? No, hacer una actualización es lo mismo que borrar (deleted) e insertar los nuevos (inserted). La sentencia UPDATE es la única en la que inserted y deleted tienen datos simultaneamente.
  #3 (permalink)  
Antiguo 18/08/2010, 07:34
Avatar de R3N0  
Fecha de Ingreso: febrero-2010
Mensajes: 13
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: For update

Prueba con este codigo!!!


IF (UPDATE (a) or UPDATE(b))
BEGIN
INSERT INTO tabla(fecha, a, b)
SELECT getdate(), a, b
FROM tablaActualizada
where a in (select a from inserted) or b in (select b from inserted)
END
  #4 (permalink)  
Antiguo 18/08/2010, 10:51
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: For update

Hemos comentado que es mejor utilizar el EXISTS(), en lugar del IN()
  #5 (permalink)  
Antiguo 18/08/2010, 11:57
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: For update

Que quede de la Siguiente forma?

IF (UPDATE (a) or UPDATE(b))
BEGIN
INSERT INTO tabla(fecha, a, b)
SELECT getdate(), a, b
FROM tablaActualizada
where a EXISTS(select a from inserted) or b EXISTS(select b from inserted)
END
  #6 (permalink)  
Antiguo 18/08/2010, 12:27
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: For update

Código SQL:
Ver original
  1. IF (UPDATE (a) OR UPDATE(b))
  2. BEGIN
  3.     INSERT INTO tabla(fecha, a, b)
  4.     SELECT getdate(), a, b
  5.     FROM tablaActualizada ta
  6.     WHERE a EXISTS(SELECT a FROM inserted i WHERE i.a = ta.a ) OR
  7.     b EXISTS(SELECT b FROM inserted x WHERE x.b = ta.b)
  8. END
  #7 (permalink)  
Antiguo 18/08/2010, 14:12
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: For update

me funciono de la siguiente forma

IF (UPDATE(a) or UPDATE(b))
BEGIN
INSERT INTO tabla(fecha, a, b)
SELECT getdate(), a, b
FROM inserted
END

le ven algun incoveniente?
  #8 (permalink)  
Antiguo 18/08/2010, 15:07
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: For update

Ninguno, esta perfecto...
  #9 (permalink)  
Antiguo 18/08/2010, 15:54
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 1 mes
Puntos: 1
Respuesta: For update

Gracias por su ayuda, hasta pronto
  #10 (permalink)  
Antiguo 19/08/2010, 10:35
Avatar de R3N0  
Fecha de Ingreso: febrero-2010
Mensajes: 13
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: For update

de lujo!!!

Etiquetas: update
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 00:47.