Compruebe si las tablas insertadas y eliminadas son idénticas en el desencadenador de SQL Server

usuario7733611

Escribí un disparador para mantener un historial de actualizaciones en una tabla. Funciona bien. Sin embargo, noté que a veces la tabla se actualiza con los mismos valores exactos. Esto efectivamente no cambia la tabla, pero activa el disparador, lo que resulta en filas duplicadas en mi tabla de historial.

Para resolver esto, me gustaría ejecutar el cuerpo de mi disparador solo cuando las tablas insertedy deletedno son idénticas.

Aquí está mi detonante actual. Consiste en un FUSION y un INSERT. Si las tablas insertedy deletedson idénticas, no quiero FUSIONAR NI INSERTAR:

BEGIN
    DECLARE @yesterday date, @maxDate date
    SET @yesterday = DATEADD(DD, -1, GETDATE())
    SET @maxDate = '9999-12-31'

    MERGE dbo.tblHistory AS Target
    USING (SELECT * FROM inserted) AS Source 
       ON (Target.ID = Source.ID AND Target.EndDate = @maxDate)

    WHEN MATCHED AND Target.StartDate > @yesterday THEN
        DELETE

    WHEN MATCHED THEN
        UPDATE 
            SET Target.EndDate = @yesterday
    ;

    --Insert updated row into History here
END

Esta parece ser la forma más lógica y legible por humanos de hacerlo. Sin embargo, no estoy seguro de si es el más efectivo.

TheGameiswar

Puede verificar usando excepto el operador como a continuación

  ;with cte
   as
   (SELECT * FROM inserted
    EXCEPT
    SELECT * FROM deleted
    union all
   SELECT * FROM deleted
    EXCEPT
    SELECT * FROM inserted
   )
select * from cte

if @@rowcount>0
begin
--rest of your query
end

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

Uso de tablas insertadas y eliminadas para el registro: ¿es sólido mi concepto?

Compruebe si la matriz está en otra matriz y son idénticas

En SQLite, ¿hay alguna forma de probar si dos tablas son idénticas?

Compruebe si los valores de dos matrices son iguales y están en el mismo orden

¿Cómo unir dos tablas en SQL Server, donde las ID no son las mismas?

¿Puedo combinar valores de dos filas si las etiquetas no son idénticas en pandas?

Transformar filas insertadas y eliminadas en XML para auditoría

SQL: devuelve las diferencias entre las filas (en dos tablas diferentes), pero SOLO si el ID de fila existe en ambas tablas

Unir dos tablas y mostrar nulo en el conjunto de resultados si no se encuentra una coincidencia entre las tablas unidas en SQL

Compruebe si las columnas en csv son> o <en el máximo dado

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

¿Por qué los pseudorregistros de desencadenador son marcadores de posición para las variables de enlace en el cuerpo del desencadenador pero no CUÁNDO?

Compruebe si todas las cadenas en una lista de cadenas son iguales en Inno Setup

¿Cómo deshacerse de las pestañas que hacen referencia a consultas SQL eliminadas? (en el arranque)

Compruebe si las propiedades de un objeto son nulas en TypeScript

Compruebe si las filas de la matriz son todas iguales

Shell: compruebe si todas las cadenas de salida son iguales

Compruebe si la base de datos existe en SQL Server

¿Cómo comparo dos columnas en SQL Server 2016 y, si no son iguales, las establezco iguales en función de una condición?

Cree una vista que seleccione de tablas idénticas de todas las bases de datos en el servidor y pueda manejar cada vez que se agregue una nueva tabla al servidor

Obtener el nombre completo de las tablas de SQL Server

Obtener el nombre completo de las tablas de SQL Server

SQL: compruebe si existen varios registros en varias tablas

SQL: compruebe si existen varios registros en varias tablas

Compruebe si los primeros y últimos caracteres de la cadena son los mismos en PHP

Notepad ++ Regex: elimine las líneas que son idénticas entre el inicio y la cadena definida y el clip después de dicha cadena

Compruebe si todos los campos que comparten el mismo ID en la tabla son correlativos

Python Pandas: compruebe si el valor de todas las columnas en las filas es NaN

Grabación de información en el desencadenador de SQL Server