Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Data Compare - Faltam algumas tabelas


Os dados podem ser comparados somente se você souber quais registros das tabelas devem ser comparados. O comparador usa o PK para saber quais registros comparar. Se sua tabela não tiver um PK (ou pelo menos um índice exclusivo), ela estará ausente da lista de tabelas.

Você pode resolvê-lo criando um PK você mesmo (apenas para comparação)

EDITAR

  1. Um colega de trabalho passou por um momento difícil recentemente devido a alguém explícito excluindo algumas tabelas do projeto de comparação e submetendo-o ao git. Portanto, verifique se não é um projeto novo.

  2. Recentemente, fui encarregado de comparar tabelas sem PK e encontrei HASHBYTES para ser um novo amigo, também não há linhas únicas nas tabelas e para resolver usei ROW_NUMBER com PARTITION, veja abaixo trecho.
    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 

Dessa forma posso criar PK com base em um hash calculado com todo o conteúdo da linha.

Obs:. Observe que estou comparando MyTable_TEMP e não MyTable . assim posso deixá-lo intacto.