Dane można porównywać tylko wtedy, gdy wiesz, jakie rekordy z tabel mają zostać porównane. Comparer używa PK, aby wiedzieć, które rekordy należy porównać. Jeśli Twoja tabela nie ma PK (lub przynajmniej unikalnego indeksu), nie będzie jej na liście tabel.
Możesz to rozwiązać, samodzielnie tworząc PK (tylko dla porównania)
EDYTUJ
-
Współpracownik miał ostatnio trudności z powodu wyraźnego wykluczenia niektórych tabel z projektu porównawczego i przekazania ich do git. Sprawdź to, jeśli nie jest to nowy projekt.
-
Niedawno otrzymałem zadanie porównania tabel bez PK i znalazłem HASHBYTES aby być nowym przyjacielem, również nie ma unikalnych wierszy w tabelach i do jego rozwiązania użyłem ROW_NUMBER z PARTITION, patrz poniżej fragment.
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
W ten sposób mogę tworzyć PK na podstawie hasha obliczonego z całą zawartością wiersza.
Obs:. Uwaga porównuję MyTable_TEMP
a nie MyTable
. w ten sposób mogę to pozostawić nietknięte.