Tengo un activador de actualización que agrega +1 a una columna numérica (col1) de filas cuando otra columna (col2) se actualizó a 2 (de otro valor). Estoy tratando de contar el número de veces que col2 se actualizó a 2. El disparador funciona bien cuando col1 no es nulo, pero me gustaría poder manejar el caso nulo también (tratando nulo como 0).
Pensé que la función de unión ( coalesce(deleted.col1+1,1)
) funcionaría, pero la columna permanece nula si comienza como nula. "Funciona" con la función de unión si el valor no es nulo.
La NOT NULL
condición tampoco funciona para el caso nulo. Además, un segundo UPDATE ( SET col1=1
) con una cláusula WHERE que pregunta si deleted.col1 IS NULL
no se actualiza en el caso nulo, así que estoy un poco perplejo.
¿Alguna idea sobre cuál es el problema?
Código:
CREATE TRIGGER schema1.trigger1
ON schema1.table1
FOR UPDATE
AS
IF UPDATE(col2)
BEGIN
UPDATE t
SET t.col1 = coalesce(d.col1+1,1)
FROM schema1.table1 AS t
INNER JOIN INSERTED AS i ON t.ID = i.ID
INNER JOIN DELETED AS d ON i.ID = d.ID
WHERE i.col2 = 2
AND d.col2 != 2
AND i.col1 = d.col1;
--WHERE...i.col1 = d.col1 added in case this column is being updated by user
END;
Publicación por primera vez, así que si hay algo que pueda hacer para mejorar mi pregunta, no dudes en hacérmelo saber.
Su problema está en la WHERE
cláusula, no en su COALESCE()
función:
WHERE i.col2 = 2 AND d.col2 != 2 AND i.col1 = d.col1;
La segunda condición there ( i.col1 = d.col1
) nunca se evaluará como VERDADERA si d.col1 ES NULO.
Una posible solución sería escribir algo como lo siguiente:
WHERE
i.col2 = 2 AND
d.col2 != 2 AND
(i.col1 = d.col1 OR (i.col1 IS NOT NULL AND d.col1 IS NULL)) ;
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras