Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comparaison de données SQL - Certaines tables manquent

Les données ne peuvent être comparées que si vous savez quels enregistrements des tables doivent être comparés. Comparer utilise PK pour savoir quels enregistrements comparer. Si votre table n'a pas de PK (ou au moins un index unique), elle sera absente de la liste des tables.

Vous pouvez le résoudre en créant vous-même un PK (juste à titre de comparaison)

MODIFIER

  1. Un collègue a eu du mal récemment à cause de quelqu'un qui a explicitement exclu certaines tables du projet de comparaison et l'a engagé dans git. Vérifiez donc s'il ne s'agit pas d'un nouveau projet.

  2. J'ai récemment été chargé de comparer des tables sans PK et j'ai trouvé HASHBYTES pour être un nouvel ami, il n'y a pas non plus de lignes uniques dans les tableaux et pour le résoudre, j'ai utilisé ROW_NUMBER avec PARTITION, voir l'extrait ci-dessous.

    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 

De cette façon, je peux créer un PK basé sur un hachage calculé avec l'intégralité du contenu de la ligne.

Obs :. Notez que je compare MyTable_TEMP et non MyTable . de cette façon, je peux le laisser intact.