2011-03-09 13 views
18

Soy nuevo en los desencadenantes y quiero crear un activador en una actualización de una columna y actualizar otra tabla con ese valor.¿Cómo usar la activación de actualización para actualizar otra tabla?

Tengo table1 con una columna de año y si la aplicación actualiza esa columna de año, necesito actualizar la tabla 2 con el año del mismo año.

ALTER TRIGGER [dbo].[trig_UpdateAnnualYear] 
    ON [dbo].[table1] 
    AFTER UPDATE 
AS 

if (UPDATE (intAnnualYear)) 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for trigger here 

    Update table2 set AnnualYear = intAnnualYear where table2.ID = table1.ID 
END 
+1

Y cuál es tu pregunta? – Oded

Respuesta

22

no se hace referencia table1 dentro del gatillo. Use la pseudo tabla inserted para obtener los valores "posteriores". Recuerde también que una actualización puede afectar a varias filas.

Así que reemplazar su actual update declaración con

UPDATE table2 
SET table2.annualyear = inserted.intannualyear 
FROM table2 
     JOIN inserted 
     ON table2.id = inserted.id 
7

Sólo es necesario actualizar los registros en la Tabla 2 si el intannualyear columna está involucrado. Además, esta es una sintaxis de actualización alternativo a través de dos mesas de lo que Martin ha mostrado

IF UPDATE(intannualyear) 
    UPDATE table2 
    SET annualyear = inserted.intannualyear 
    FROM inserted 
    WHERE table2.id = inserted.id 
+0

+1 es una sintaxis de actualización más agradable. –

+0

Gracias funcionó muy bien. Solo como aclaración para otras personas que recién comienzan con desencadenantes, encontré un buen artículo para explicar la tabla insertada. http://msdn.microsoft.com/en-us/library/ms191300.aspx – Spafa9

1

Según this question, si sólo hay una mesa de "aguas abajo" y luego otra opción con una relación de clave externa definida adecuadamente estaría en cascada actualización.

0

Para complementar las respuestas anteriores, si usted tiene que comprobar más de una columna se puede utilizar un INNER JOIN entre insertado y eliminado o varios UPDATE() llama:

IF (UPDATE(Col1) OR UPDATE(Col2)) BEGIN ... 
Cuestiones relacionadas