Data kan kun sammenlignes, hvis du ved, hvilke poster fra tabeller der skal sammenlignes. Comparer bruger PK til at vide, hvilke poster der skal sammenlignes. Hvis din tabel ikke har en PK (eller i det mindste et unikt indeks), mangler det muligvis på tabellisten.
Du kan løse det ved selv at oprette en PK (bare til sammenligning)
REDIGER
-
En kollega fik det svært for nylig på grund af, at nogen eksplicit ekskluderede nogle tabeller fra sammenligningsprojektet og forpligtede det til git. Så tjek det, hvis det ikke er et nyt projekt.
-
Jeg fik for nylig til opgave at sammenligne tabeller uden PK og fandt HASHBYTES for at være en ny ven, er der heller ikke unikke rækker i tabellerne, og for at løse det brugte jeg ROW_NUMBER med PARTITION, se nedenstående snipet.
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
På den måde kan jeg oprette PK baseret på en hash beregnet med hele rækkens indhold.
Obs:. Bemærk, at jeg sammenligner MyTable_TEMP
og ikke MyTable
. på den måde kan jeg lade det stå upåvirket.