Can't be sure if this applied to SQL Server *Express*, but you can still access the "before" data even if your trigger is happening AFTER the update. You need to read the data from either the **deleted** or **inserted** table that is created on the fly when the table is changed. This is essentially what @Stamen says, but I still needed to explore further to understand that (helpful!) answer.
> The **deleted** table stores copies of the affected rows during DELETE and
> UPDATE statements. During the execution of a DELETE or UPDATE
> statement, rows are deleted from the trigger table and transferred to
> the deleted table...
>
> The **inserted** table stores copies of the affected rows during INSERT
> and UPDATE statements. During an insert or update transaction, new
> rows are added to both the inserted table and the trigger table...
>
>
[To see links please register here]
So you can create your trigger to read data from one of those tables, e.g.
CREATE TRIGGER <TriggerName> ON <TableName>
AFTER UPDATE
AS
BEGIN
INSERT INTO <HistoryTable> ( <columns...>, DateChanged )
SELECT <columns...>, getdate()
FROM deleted;
END;
My example is based on the one here:
[To see links please register here]
[tag:sql-server] [tag:triggers]