This should help get you going:CREATE TABLE #myTable (column1 int, column2 varchar(256));
go
CREATE TABLE #myTable_hist (column1 int, column2 varchar(256), HistCheck INT);
GO
INSERT INTO #myTable VALUES (1, 'test');
INSERT INTO #myTable VALUES (2, 'test');
INSERT #myTable_hist (column1, column2, HistCheck)
Select column1, column2, CHECKSUM(column2) from #myTable
-- Add new row
INSERT INTO #myTable VALUES (3, 'test');
WITH cte
AS
(
SELECT *, CHECKSUM(Column2) AS CheckVal
FROM #myTable
)
MERGE
#myTable_hist AS Target
USING
cte AS Source
ON Target.column1 = Source.column1
WHEN MATCHED AND (Target.HistCheck <> Source.CheckVal) THEN
UPDATE SET
Target.Column2 = Source.Column2,
Target.HistCheck = Source.CheckVal
WHEN NOT MATCHED THEN
INSERT (column1, column2, HistCheck)
VALUES (Source.column1, Source.column2, Source.CheckVal);