Data kan endast jämföras om du vet vilka poster från tabeller som måste jämföras. Comparer använder PK för att veta vilka poster som ska jämföras. Om din tabell inte har en PK (eller åtminstone ett unikt index) saknas det kanske i tabelllistan.
Du kan lösa det genom att skapa en PK själv (bara för jämförelse)
REDIGERA
-
En kollega fick det svårt nyligen på grund av att någon explicit uteslöt några tabeller från jämförelseprojektet och överlåtit det till git. Så kontrollera det om det inte är ett nytt projekt.
-
Jag fick nyligen i uppdrag att jämföra tabeller utan PK och hittade HASHBYTES för att vara en ny vän finns det inte heller unika rader i tabellerna och för att lösa det använde jag ROW_NUMBER med PARTITION, se avsnittet nedan.
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å så sätt kan jag skapa PK baserat på en hash beräknad med hela radens innehåll.
Obs:. Observera att jag jämför MyTable_TEMP
och inte MyTable
. på så sätt kan jag lämna den orörd.