sql >> Database >  >> RDS >> Sqlserver

SQL Data Compare - Sommige tabellen ontbreken

Gegevens kunnen alleen worden vergeleken als u weet welke records uit tabellen moeten worden vergeleken. Comparer gebruikt PK om te weten welke records moeten worden vergeleken. Als uw tabel geen PK (of op zijn minst een unieke index) heeft, zal deze ontbreken in de lijst met tabellen.

Je kunt het oplossen door zelf een PK te maken (alleen ter vergelijking)

BEWERKEN

  1. Een collega kreeg het onlangs moeilijk omdat iemand expliciet enkele tabellen uit het vergelijkingsproject heeft uitgesloten en deze aan git heeft toegewezen. Dus controleer het als het geen nieuw project is.

  2. Ik kreeg onlangs de taak om tabellen te vergelijken zonder PK en vond HASHBYTES om een ​​nieuwe vriend te zijn, zijn er ook geen unieke rijen in de tabellen en om het op te lossen heb ik ROW_NUMBER met PARTITION, zie onderstaand fragment.

    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 

Op die manier kan ik PK maken op basis van een hash die is berekend met de volledige rij-inhoud.

Obs:. Opmerking Ik vergelijk MyTable_TEMP en niet MyTable . op die manier kan ik het ongemoeid laten.



  1. CHR(0) in REGEXP_LIKE

  2. Hoe u SELECT ON tabelnaam GRANT naar PUBLIC in MySQL

  3. MySQL GROUP BY en vul lege rijen in

  4. Hoe retourneer ik meerdere resultatensets met SqlCommand?