El desencadenador de actualización de SQL Server no actualiza las columnas cuando el valor es nulo

DKuyek

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 NULLcondició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 NULLno 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.

AHiggins

Su problema está en la WHEREclá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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pagination class not getting applied in html

  3. 3

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  4. 4

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  5. 5

    OpenQA.Selenium.NoSuchElementException-C # 셀레늄

  6. 6

    OAuth 2.0 utilizando Spring Security + WSO2 Identity Server

  7. 7

    ¿Cómo pintar el Dropline de un RowHeader-JTable en el Main-JTable durante un DragAndDrop?

  8. 8

    Joindre avec des valeurs séparées par des virgules dans SQL Server Compact ne fonctionne pas

  9. 9

    Recherche de la position d'index d'une valeur dans r dataframe

  10. 10

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  11. 11

    caída condicional de filas desde un marco de datos de pandas

  12. 12

    python: ¿por qué dice variable indefinida cuando llamo función?

  13. 13

    Error: la ejecución falló para la tarea ': app: compileDebugJavaWithJavac'. java.io.FileNotFoundException:

  14. 14

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  15. 15

    Que signifie Decimal (-1)?

  16. 16

    Link library in Visual Studio, why two different ways?

  17. 17

    ¿Cómo determinar la menor cantidad de incrementos de Y necesarios para trazar un múltiplo de 5 en una gráfica?

  18. 18

    nested observables executed one after the other after termination

  19. 19

    uitableview delete button image in iOS

  20. 20

    C # cómo eliminar la última línea de un bucle

  21. 21

    R - ggplot2 - use raster as greyscale basemap

CalienteEtiquetas

Archivo