it seems to me that you might be able to replace the trigger with default values.
the WHERE criteria is huge in your example, and ALL must be zero to get the trigger to punch in changes?
As Kieth mentioned, he's guessing it's probably to fix any zero values, so it doesn't quite look right; i'd agree i'd suspect the intention is to replace zeros with expected values.
here's a trigger that actually does exactly what the update should do, and a second one that does what i agree might be the desired outcome.
CREATE TRIGGER TR_PrmMilkVisitExample1 ON dbo.PrmMilkVisit
FOR UPDATE
AS
UPDATE MyTarget
SET MyTarget.MviLFXPosition = 60,
MyTarget.MviLFYPosition = 660,
MyTarget.MviLFZPosition = 510,
MyTarget.MviLRXPosition = 30,
MyTarget.MviLRYPosition = 780,
MyTarget.MviLRZPosition = 520,
MyTarget.MviRFXPosition = -70,
MyTarget.MviRFYPosition = 670,
MyTarget.MviRFZPosition = 500,
MyTarget.MviRRXPosition = -30,
MyTarget.MviRRYPosition = 790,
MyTarget.MviRRZPosition = 520
FROM dbo.PrmMilkVisit MyTarget
INNER JOIN INSERTED T1
ON MyTarget.LacId = T1.LacId --only the records updated in this set
WHERE MyTarget.MviLFXPosition = 0
AND MyTarget.MviLFYPosition = 0
AND MyTarget.MviLFZPosition = 0
AND MyTarget.MviLRXPosition = 0
AND MyTarget.MviLRYPosition = 0
AND MyTarget.MviLRZPosition = 0
AND MyTarget.MviRFXPosition = 0
AND MyTarget.MviRFYPosition = 0
AND MyTarget.MviRFZPosition = 0
AND MyTarget.MviRRXPosition = 0
AND MyTarget.MviRRYPosition = 0
AND MyTarget.MviRRZPosition = 0
CREATE TRIGGER TR_PrmMilkVisitExample2 ON dbo.PrmMilkVisit
FOR UPDATE
AS
UPDATE MyTarget
SET MyTarget.MviLFXPosition = CASE WHEN T1.MviLFXPosition = 0 THEN 60 ELSE T1.MviLFXPosition END,
MyTarget.MviLFYPosition = CASE WHEN T1.MviLFYPosition = 0 THEN 660 ELSE T1.MviLFYPosition END,
MyTarget.MviLFZPosition = CASE WHEN T1.MviLFZPosition = 0 THEN 510 ELSE T1.MviLFZPosition END,
MyTarget.MviLRXPosition = CASE WHEN T1.MviLRXPosition = 0 THEN 30 ELSE T1.MviLRXPosition END,
MyTarget.MviLRYPosition = CASE WHEN T1.MviLRYPosition = 0 THEN 780 ELSE T1.MviLRYPosition END,
MyTarget.MviLRZPosition = CASE WHEN T1.MviLRZPosition = 0 THEN 520 ELSE T1.MviLRZPosition END,
MyTarget.MviRFXPosition = CASE WHEN T1.MviRFXPosition = 0 THEN -70 ELSE T1.MviRFXPosition END,
MyTarget.MviRFYPosition = CASE WHEN T1.MviRFYPosition = 0 THEN 670 ELSE T1.MviRFYPosition END,
MyTarget.MviRFZPosition = CASE WHEN T1.MviRFZPosition = 0 THEN 500 ELSE T1.MviRFZPosition END,
MyTarget.MviRRXPosition = CASE WHEN T1.MviRRXPosition = 0 THEN -30 ELSE T1.MviRRXPosition END,
MyTarget.MviRRYPosition = CASE WHEN T1.MviRRYPosition = 0 THEN 790 ELSE T1.MviRRYPosition END,
MyTarget.MviRRZPosition = CASE WHEN T1.MviRRZPosition = 0 THEN 52 ELSE T1.MviRRZPosition END
FROM dbo.PrmMilkVisit MyTarget
INNER JOIN INSERTED T1
ON MyTarget.LacId = T1.LacId --only the records updated in this set
Lowell