Trigger, trigger…

Ne használj triggereket soha. Legalábbis sok helyen ezt ajánlják. Én ezen finomítanék: ésszel használj triggereket.

A legfontosabb, amit észben kell tartani: a trigger ugyanabban a tranzakcióban fut, mint az eredeti parancsod. Ez érdekes lockok szempontjából és érdekes elszállás szempontjából is.

Lockok szempontjából azért, mert ha a trigger hozzányúl egy másik táblához is, mint amire vonatkozik, akkor abban is lockol, és amíg az egész le nem fut, tartja is természetesen a lockot.

Elszállás szempontjából meg azért, hogy ha a triggerben levő parancs elszáll valami miatt, akkor oda az egész tranzakció.

Ha triggert készítünk, akkor típusonként csak egyet használjunk. Ha már többre van szükségünk ugyanolyanból, mondjuk két update triggerre, akkor már inkább írjunk egy tárolt eljárást.

Plusz nehézség, hogy a triggerek sorrendjét sem nagyon tudod megadni. Van ugyan az sp_settriggerorder, de azzal is csak egy kis alapbeállítást tudsz végrehajtani. A konkrét végrehajtási sorrendet nem tudod meghatározni több ugyanolyan típusú trigger esetén.

Vagyis röviden:

  • egy típusú triggerből csak egyet használjunk
  • tökéletesen hibatűrővé kell tennünk a triggerünket
  • a lehető legkisebb számú más táblához nyúljunk hozzá a triggerből