Data dapat dibandingkan hanya jika Anda tahu catatan apa dari tabel yang harus dibandingkan. Pembanding menggunakan PK untuk mengetahui catatan apa yang akan dibandingkan. Jika tabel Anda tidak memiliki PK (atau setidaknya indeks unik), tabel tersebut akan hilang dari daftar tabel.
Anda dapat menyelesaikannya dengan membuat PK sendiri (hanya untuk perbandingan)
EDIT
-
Seorang rekan kerja mengalami kesulitan baru-baru ini karena seseorang secara eksplisit mengecualikan beberapa tabel dari proyek perbandingan dan memasukkannya ke git. Jadi periksa apakah itu bukan proyek baru.
-
Saya baru-baru ini ditugaskan untuk membandingkan tabel tanpa PK dan menemukan HASHBYTES untuk menjadi teman baru, juga tidak ada baris unik di tabel dan untuk menyelesaikannya saya menggunakan ROW_NUMBER dengan PARTITION, lihat cuplikan di bawah.
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
Dengan begitu saya dapat membuat PK berdasarkan hash yang dihitung dengan seluruh konten baris.
Obs:. Catatan saya membandingkan MyTable_TEMP
dan bukan MyTable
. dengan begitu saya bisa membiarkannya tidak tersentuh.