sql >> Base de Datos >  >> RDS >> Sqlserver

Comparación de datos SQL:faltan algunas tablas

Los datos se pueden comparar solo si sabe qué registros de las tablas se deben comparar. Comparer usa PK para saber qué registros comparar. Si su tabla no tiene un PK (o al menos un índice único), no aparecerá en la lista de tablas.

Puede resolverlo creando un PK usted mismo (solo para comparar)

EDITAR

  1. Un compañero de trabajo tuvo dificultades recientemente debido a que alguien excluyó explícitamente algunas tablas del proyecto de comparación y las envió a git. Así que compruébalo si no es un proyecto nuevo.

  2. Recientemente me encargaron comparar tablas sin PK y encontré HASHBYTES para ser un nuevo amigo, además, no hay filas únicas en las tablas y para resolverlo usé ROW_NUMBER con PARTICIÓN, vea el fragmento a continuación.

    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 esa manera, puedo crear PK basado en un hash calculado con el contenido de la fila completa.

Obs:. Tenga en cuenta que estoy comparando MyTable_TEMP y no MyTable . así puedo dejarlo intacto.