Steve Jones looks at the OUTPUT clause:
I often see people struggling to use triggers for auditing, or having issues with building them to handle multi row updates. However, there’s another choice: the OUTPUT clause.
Not many people use this clause, but it’s a great way to access the virtual inserted and deleted tables in your code.
My favorite post on the topic is still Adam Machanic’s.