Я все еще не понимаю, что такое «обнаружение их», но я попробую.
Исключить их легко
например
SELECT DISTINCT * FROM USERS
Однако, если вы хотите включить только их, а дубликаты - это все поля, которые нужно сделать
SELECT
[Each and every field]
FROM
USERS
GROUP BY
[Each and every field]
HAVING COUNT(*) > 1
Вы не можете сойти с рук, просто используя (*), потому что вы не можете GROUP BY *
, так что это требование из ваших комментариев сложно
независимый от схемы означает, что я не 'не требуется указывать все столбцы в запросе
Если только вы не хотите использовать динамический SQL и читать столбцы из sys.columns
или information_schema.columns
Например
DECLARE @colunns nvarchar(max)
SET @colunns = ''
SELECT @colunns = @colunns + '[' + COLUMN_NAME +'], '
FROM INFORMATION_SCHEMA.columns
WHERE table_name = 'USERS'
SET @colunns = left(@colunns,len(@colunns ) - 1)
DECLARE @SQL nvarchar(max)
SET @SQL = 'SELECT ' + @colunns
+ 'FROM USERS' + 'GROUP BY '
+ @colunns
+ ' Having Count(*) > 1'
exec sp_executesql @SQL
Обратите внимание, что вы должны прочитать это Проклятие и благословение динамического SQL , если вы еще не