En un disparador, puedo determinar si una columna se establece explícitamente en un archivo de valores o no se menciona en la declaración de actualización?
-
16-10-2019 - |
Pregunta
Dada una tabla con una columna col1 como esto:
create table MyTest (
col1 int NULL,
col2 decimal(7, 2) NULL
);
insert into MyTest values ( 1, 1.1);
¿Hay una manera para que un disparador de actualización para decidir cuál de las siguientes instrucciones de actualización se ejecuta?
A:
update MyTest set col1 = 3;
B:
update MyTest set col1 = 3, col2 = 1.1;
Solución
Se hace una diferencia si esto va a ser un disparador basado en conjuntos, o si se está diseñando para manejar sólo una fila a la vez, pero esto debe conseguir que apunta en la dirección correcta.
IF
UPDATE(col1)
AND UPDATE(col2)
AND EXISTS(SELECT * FROM inserted WHERE col1 = 3 AND col2 = 1.1)
BEGIN
DO STUFF
END
IF
UPDATE(col1)
AND EXISTS(SELECT * FROM inserted WHERE col1 = 3)
BEGIN
DO STUFF
END
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange