Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Confronto dati SQL - Mancano alcune tabelle

I dati possono essere confrontati solo se si conosce quali record delle tabelle devono essere confrontati. Comparer usa PK per sapere quali record confrontare. Se la tua tabella non ha un PK (o almeno un indice univoco) non sarà presente nell'elenco delle tabelle.

Puoi risolverlo creando tu stesso un PK (solo per confronto)

MODIFICA

  1. Un collega ha avuto difficoltà di recente a causa di qualcuno che ha esplicitamente escluso alcune tabelle dal progetto di confronto e l'ha affidato a git. Quindi controlla se non è un nuovo progetto.

  2. Di recente mi è stato assegnato il compito di confrontare le tabelle senza PK e ho trovato HASHBYTE per essere un nuovo amico, inoltre non ci sono righe univoche nelle tabelle e per risolverlo ho usato ROW_NUMBER con PARTITION, vedi sotto 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 

In questo modo posso creare PK in base a un hash calcolato con l'intero contenuto della riga.

Osservazioni:. Nota che sto confrontando MyTable_TEMP e non MyTable . in questo modo posso lasciarlo intatto.