Dans un déclencheur, puis-je déterminer si une colonne a été explicitement définie sur une valeur ou non mentionné dans la déclaration de mise à jour?

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

  •  16-10-2019
  •  | 
  •  

Question

Étant donné une table avec une colonne col1 comme ceci:

create table MyTest (
    col1 int NULL,
    col2 decimal(7, 2) NULL
);

insert into MyTest values ( 1, 1.1);

Est-il possible pour un déclencheur de mise à jour pour décider lequel des énoncés de mise à jour suivantes a été exécutée?

update MyTest set col1 = 3;

B:

update MyTest set col1 = 3, col2 = 1.1;
Était-ce utile?

La solution

Il fait une différence si cela va être un élément déclencheur basé sur un ensemble, ou si vous concevez pour traiter une seule ligne à la fois, mais cela devrait vous être pointées dans la bonne direction.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top