Dữ liệu chỉ có thể được so sánh nếu bạn biết bản ghi nào từ các bảng phải được so sánh. Comparer sử dụng PK để biết những bản ghi nào cần so sánh. Nếu bảng của bạn không có PK (hoặc ít nhất là một chỉ mục duy nhất) thì nó sẽ bị thiếu trong danh sách bảng.
Bạn có thể giải quyết bằng cách tự tạo PK (chỉ để so sánh)
CHỈNH SỬA
-
Một đồng nghiệp đã gặp khó khăn gần đây do ai đó rõ ràng loại trừ một số bảng khỏi dự án so sánh và cam kết nó thành git. Vì vậy, hãy kiểm tra nó nếu nó không phải là một dự án mới.
-
Gần đây, tôi được giao nhiệm vụ so sánh các bảng không có PK và tìm thấy HASHBYTES để trở thành một người bạn mới, cũng không có hàng duy nhất trong bảng và để giải quyết nó, tôi đã sử dụng ROW_NUMBER với PARTITION, xem đoạn trích bên dưới.
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
Bằng cách đó, tôi có thể tạo PK dựa trên một hàm băm được tính toán với toàn bộ nội dung hàng.
Ám ảnh:. Lưu ý rằng tôi đang so sánh MyTable_TEMP
chứ không phải MyTable
. theo cách đó tôi có thể để nó không bị phân nhánh.