Alternative of trigger to insert updated date in a column
I would use the DELETED table that is available when you do an update.
this is done through the OUTPUT Clause (Transact-SQL)

there is an example on the link above.

USE tempdb;
GO
CREATE TABLE dbo.table1
(
    id INT,
    employee VARCHAR(32)
);
GO

INSERT INTO dbo.table1 VALUES 
      (1, 'Fred')
     ,(2, 'Tom')
     ,(3, 'Sally')
     ,(4, 'Alice');
GO

DECLARE @MyTableVar TABLE
(
    id INT,
    employee VARCHAR(32)
);

PRINT 'table1, before delete' 
SELECT * FROM dbo.table1;

DELETE FROM dbo.table1
OUTPUT DELETED.* INTO @MyTableVar
WHERE id = 4 OR id = 2;

PRINT 'table1, after delete'
SELECT * FROM dbo.table1;

PRINT '@MyTableVar, after delete'
SELECT * FROM @MyTableVar;

DROP TABLE dbo.table1;


...

-- Results
-- table1, before delete
-- id          employee
-------------- ------------------------------
-- 1           Fred
-- 2           Tom
-- 3           Sally
-- 4           Alice
--
-- table1, after delete
-- id          employee
-------------- ------------------------------
-- 1           Fred
-- 3           Sally
-- @MyTableVar, after delete
-- id          employee
-------------- ------------------------------
-- 2           Tom
-- 4           Alice


and this is an example of how I use it, on a specific situation.

I use dynamic sql in this case.
Look as the DELETED table is used and the records are saved into a newly created table TableBackups.dbo._KB_20140513_tblStockThreshold in case we need to rollback later on.

USE SAStockLevel

DECLARE @SQL VARCHAR(max)

SET @SQL = 
'
CREATE TABLE TableBackups.dbo._KB_'+CONVERT(VARCHAR(8),GETDATE(),112)+'_tblStockThreshold
    (
      [strItemNo] [varchar](20) COLLATE Latin1_General_CI_AS
                                NOT NULL ,
      [sintMarketID] [int] NOT NULL ,
      [sintChannelID] [int] NOT NULL ,
      [lngQtyThreshold] [int] NOT NULL ,
      [dtmRecordAdded] [datetime] NOT NULL ,
      [strAddedBy] [varchar](50) COLLATE Latin1_General_CI_AS
                                 NOT NULL ,
      [dtmLastUpdated] [datetime] NOT NULL ,
      [strUpdatedBy] [varchar](50) COLLATE Latin1_General_CI_AS
                                   NOT NULL ,
      [ActiveRecord] [bit] NOT NULL ,
      [ActiveMarket] [bit] NOT NULL ,
      [ActiveChannel] [bit] NOT NULL
)

-- UK

UPDATE  dbo.tblStockThreshold
SET     lngQtyThreshold = 0
OUTPUT  DELETED.strItemNo, DELETED.sintMarketID, DELETED.sintChannelID, DELETED.lngQtyThreshold, DELETED.dtmRecordAdded, DELETED.strAddedBy, DELETED.dtmLastUpdated, DELETED.strUpdatedBy, DELETED.ActiveRecord, DELETED.ActiveMarket, DELETED.ActiveChannel
        INTO TableBackups.dbo._KB_'+CONVERT(VARCHAR(8),GETDATE(),112)+'_tblStockThreshold
WHERE   strItemNo IN (
        SELECT  strItemNo
        FROM    dbo.tblOrgGrpStockLevel
        WHERE   lngTotal - ( lngAllocated + lngReserved ) BETWEEN 1 AND 4
                AND tintOrgGrpId = 1
                AND lngTotal &lt;&gt; 0 )
        AND sintMarketID = 1
        AND sintChannelID IN ( 1, 2 )
        AND lngQtyThreshold &lt; 6666
        AND lngQtyThreshold &lt;&gt; 0
'
print @sql

BEGIN TRANSACTION T1
EXEC (@SQL)


COMMIT TRANSACTION T1



select * from TableBackups.dbo._KB_20140513_tblStockThreshold