Al observar otros ejemplos, se me ocurrió lo siguiente, pero no parece funcionar como me gustaría: quiero que solo actualice la información modificada si el QtyToRepair
valor se ha actualizado ... pero no funciona ese.
Si comento dónde, la información modificada se actualiza en todos los casos. Como dije, otros ejemplos me llevaron a ser optimista. Cualquier pista apreciada. Gracias.
Walter
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
ON [dbo].[SCHEDULE]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE SCHEDULE SET modified = GETDATE()
, ModifiedUser = SUSER_NAME()
, ModifiedHost = HOST_NAME()
FROM SCHEDULE S
INNER JOIN Inserted I on S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
WHERE S.QtyToRepair <> I.QtyToRepair
END
sql
sql-server
triggers
Walter de Jong
fuente
fuente
update()
: solo prueba si la columna aparece en la lista de actualización y siempre es cierta para las inserciones. No comprueba si el valor de la columna ha cambiado, porque es posible que tenga más de una fila, donde algunos valores han cambiado y otros no.Respuestas:
Tiene dos vías para su pregunta:
1- Usa el comando de actualización en tu gatillo.
2- Use Unir entre la tabla insertada y la tabla eliminada
Cuando usa el comando de actualización para la tabla
SCHEDULE
y establece laQtyToRepair
columna en un nuevo valor, si el nuevo valor es igual al valor anterior en una o varias filas, la solución 1 actualiza todas las filas actualizadas en la tabla de programación, pero la solución 2 solo actualiza las filas de programación que el valor anterior no es igual al nuevo valor.fuente
inserted
tabla en la segunda consulta? debería ser igual que la mesa misma, ¿no?fyi El código con el que terminé:
fuente
WHERE S.QtyToRepair <> I.QtyToRepair AND D.QtyToRepair <> I.QtyToRepair
nunca se activaron / coincidieron, ya que el primer criterio nunca fue cierto: la tabla insertada siempre coincidió con el valor real de la tabla. Usar `WHERE I.QtyToRepair <> D.QtyToRepair` fue la clave para mí. También laIF UPDATE (field)
ayuda de múltiples disparadores.Uno debe verificar si
QtyToRepair
está actualizado al principio.fuente
Quieres hacer lo siguiente:
Tenga en cuenta que este activador se activará cada vez que actualice la columna, sin importar si el valor es el mismo o no.
fuente
Siempre que un registro se actualiza, se "elimina". Aquí está mi ejemplo:
Funciona bien
fuente