for SQL Server 2005 and up try something like this:
declare @CurrentTable table (pk int, valuedata varchar(5))
declare @oldtable table (pk int, valuedata varchar(5))
insert into @CurrentTable values (1,'aa')
insert into @CurrentTable values(2,'bb')
insert into @CurrentTable values(3,'cc')
insert into @CurrentTable values(4,'dd')
insert into @CurrentTable values(5,'ee')
insert into @oldtable values(1,'aa')
insert into @oldtable values(1,'bb')
insert into @oldtable values(3,'zz')
insert into @oldtable values(7,'aa')
insert into @oldtable values(8,'qq')
select pk,valuedata from @CurrentTable
except
select pk,valuedata from @oldtable
OUTPUT
pk valuedata
----------- ---------
2 bb
3 cc
4 dd
5 ee
(4 row(s) affected)
if SQL Server 2000 or older try something like this:
SELECT
c.*
FROM YourTableCurrent c
LEFT OUTER JOIN YourTableOld o ON c.id=o.id
WHERE ISNULL(c.IntCol,-2147483648)!=ISNULL(o.IntCol,-2147483648)
OR ISNULL(c.varcharCol,'||null||')!=ISNULL(o.varcharCol,'||null||')
OR ISNULL(c.DatetimeCol,'01/01/1753')!=ISNULL(o.DatetimeCol,'01/01/1753')
....
UNION
SELECT
o.*
FROM YourTableOld o
LEFT OUTER JOIN YourTableCurrent c ON c.id=o.id
WHERE c.id IS NULL
....