• The short answer:

    SQL reads back over the transaction log entries for the transaction that needs to be rolled back and generates compensating operations (operations that reverse the effect of each logged change) which it then logs and executes.

    Gail Shaw
    Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
    SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability

    We walk in the dark places no others will enter
    We stand on the bridge and no one may pass