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?

dba.stackexchange https://dba.stackexchange.com/questions/1604

  •  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;
¿Fue útil?

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
scroll top