SQL Server has two statements that can be very useful inside a trigger - UPDATED({column_name}) and COLUMNS_UPDATED() which provide a way to determine which column(s) were updated by the current sql statement. BOL has many details on this.

However, it is important to note that these statements do not indicate if the data was changed, only if the column(s) were named in the sql statement. For example, if the data was "1" and the sql says "SET {column_name} = '1' " then that column will be reported as being updated when in fact the contents of the field did not change.

Most .NET applications will name all the fields when updating data, so these statements aren't very useful on their own; it is really when a trigger is invoked by another trigger, or a batch update statement, when using those statements can be to your advantage.