Выберите столбцы из таблиц sys и сгенерируйте SQL-оператор с предложением group by, как показано здесь:
declare @tbl varchar(255) = 'your_table' -- <<<< your table
declare @tmp nvarchar(max) = ''
select @tmp = @tmp + column_name + ', '
from (SELECT o.name as table_name
,c.name AS column_name
,c.column_id
FROM sys.columns AS c
join sysobjects as o on c.object_id=o.id
where o.name = @tbl
and c.name not in ('id', 'add_date', 'edit_date') -- <<<< fields you don't want to compare
) as t1
declare @fields nvarchar(max) = (select substring(@tmp, 0, len(@tmp)))
declare @string nvarchar(max) = N'select ' + @fields + ', count(id) as no, min(id) as first_id, max(id) as last_id from dbo.' + @tbl + ' group by ' + @fields + ' having count(id)>1'
exec (@string)
, в результате вы получите все столбцы с дополнительным количеством равных строк, первое (min) id и последний (max) id.