Ответ 1
Данные можно сравнивать, только если вы знаете, какие записи из таблиц нужно сравнивать. Comparer использует PK, чтобы знать, какие записи сравнивать. Если в вашей таблице нет PK (или хотя бы уникального индекса), он может отсутствовать в списке таблиц.
Вы можете решить эту проблему, создав ПК самостоятельно (только для сравнения)
EDIT
Сотруднику недавно пришлось нелегко из-за того, что кто-то явно исключил некоторые таблицы из проекта сравнения и отправил его в git. Так что проверьте, если это не новый проект.
Недавно мне было поручено сравнить таблицы без PK, и я обнаружил, что HASHBYTES является новым другом. Кроме того, в таблицах нет уникальных строк, и для их решения я использовал ROW_NUMBER с PARTITION, см. ниже фрагмент.
SELECT Row_number()
OVER (
partition BY [hashid]
ORDER BY [hashid]) AS RowNumber,
*
INTO [dbo].[mytable_temp]
FROM (SELECT Hashbytes('SHA2_512', (SELECT x.*
FOR xml raw)) AS [HASHID],
*
FROM [dbo].[mytable] AS x) AS y
go
ALTER TABLE [dbo].[mytable_temp]
ALTER COLUMN [hashid] VARBINARY(900) NOT NULL
ALTER TABLE [dbo].[mytable_temp]
ALTER COLUMN [rownumber] BIGINT NOT NULL
go
ALTER TABLE [dbo].[mytable_temp]
ADD CONSTRAINT pk_id PRIMARY KEY ([hashid], [rownumber])
go
Таким образом, я могу создать PK на основе хеша, рассчитанного для всего содержимого строки.
Obs :. Заметьте, я сравниваю MyTable_TEMP
, а не MyTable
. таким образом, я могу оставить это без внимания.