Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Datenvergleich - Einige Tabellen fehlen

Daten können nur verglichen werden, wenn Sie wissen, welche Datensätze aus Tabellen verglichen werden müssen. Comparer verwendet PK, um zu wissen, welche Datensätze verglichen werden sollen. Wenn Ihre Tabelle keinen PK (oder zumindest keinen eindeutigen Index) hat, fehlt sie in der Tabellenliste.

Sie können es lösen, indem Sie selbst ein PK erstellen (nur zum Vergleich)

BEARBEITEN

  1. Ein Kollege hatte kürzlich eine schwere Zeit, weil jemand explizit einige Tabellen aus dem Vergleichsprojekt ausgeschlossen und an Git übergeben hat. Überprüfen Sie es also, wenn es sich nicht um ein neues Projekt handelt.

  2. Ich wurde kürzlich beauftragt, Tabellen ohne PK zu vergleichen, und fand HASHBYTES Um ein neuer Freund zu sein, gibt es auch keine eindeutigen Zeilen in den Tabellen, und um es zu lösen, habe ich ROW_NUMBER mit PARTITION, siehe unten Snipet.

    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 

Auf diese Weise kann ich PK basierend auf einem Hash erstellen, der mit dem gesamten Zeileninhalt berechnet wird.

Beob.:. Beachten Sie, dass ich MyTable_TEMP vergleiche und nicht MyTable . Auf diese Weise kann ich es unberührt lassen.