Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

So sánh dữ liệu SQL - Một số bảng bị thiếu

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

  1. 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.

  2. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để ghi đầu ra câu lệnh SQL vào tệp CSV?

  2. Nhận một tập hợp con các bản ghi cùng với Tổng số bản ghi

  3. Tôi đang cố gắng tạo một thủ tục được lưu trữ để tạo thông tin đăng nhập và người dùng cơ sở dữ liệu?

  4. Sử dụng bảng cơ sở dữ liệu làm hàng đợi

  5. Nhật ký giao dịch SQL Server - Phần 1