Data lze porovnávat pouze v případě, že víte, jaké záznamy z tabulek je třeba porovnávat. Porovnávač používá PK, aby věděl, jaké záznamy porovnávat. Pokud vaše tabulka nemá PK (nebo alespoň jedinečný index), bude v seznamu tabulek chybět.
Vyřešíte to tak, že si PK vytvoříte sami (jen pro srovnání)
UPRAVIT
-
Spolupracovník měl nedávno potíže kvůli tomu, že někdo explicitně vyloučil některé tabulky ze srovnávacího projektu a svěřil je git. Takže to zkontrolujte, jestli to není nový projekt.
-
Nedávno jsem dostal za úkol porovnat tabulky bez PK a našel jsem HASHBYTES abych byl novým přítelem, v tabulkách také nejsou jedinečné řádky a k vyřešení jsem použil ROW_NUMBER s PARTITION, viz úryvek níže.
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
Tímto způsobem mohu vytvořit PK na základě hash vypočítaného s celým obsahem řádku.
Obs:. Poznámka:Porovnávám MyTable_TEMP
a ne MyTable
. tak to můžu nechat nedotčené.