Update trigger seemingly won't fire if multiple rows are updated
Your INSERT is nested under IF UPDATE(Stock_out) but then filters on i.Stock_out &lt;&gt; d.Stock_out which is redundant.

If Stock_out is ever allowed to be NULL then your WHERE clause will never match (because NULL IS NULL evaluates as true but NULL &lt;&gt; NULL always evaluates as NULL which will not match). Please check that.

I am unsure how the UPDATE() function responds to multi-row invocations as the Microsoft Docs don't seem to mention it! Somebody please update me on this. I would avoid using something with unclear behavior.