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

SQL Data Compare - Nogle tabeller mangler

Data kan kun sammenlignes, hvis du ved, hvilke poster fra tabeller der skal sammenlignes. Comparer bruger PK til at vide, hvilke poster der skal sammenlignes. Hvis din tabel ikke har en PK (eller i det mindste et unikt indeks), mangler det muligvis på tabellisten.

Du kan løse det ved selv at oprette en PK (bare til sammenligning)

REDIGER

  1. En kollega fik det svært for nylig på grund af, at nogen eksplicit ekskluderede nogle tabeller fra sammenligningsprojektet og forpligtede det til git. Så tjek det, hvis det ikke er et nyt projekt.

  2. Jeg fik for nylig til opgave at sammenligne tabeller uden PK og fandt HASHBYTES for at være en ny ven, er der heller ikke unikke rækker i tabellerne, og for at løse det brugte jeg ROW_NUMBER med PARTITION, se nedenstående 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

På den måde kan jeg oprette PK baseret på en hash beregnet med hele rækkens indhold.

Obs:. Bemærk, at jeg sammenligner MyTable_TEMP og ikke MyTable . på den måde kan jeg lade det stå upåvirket.



  1. Hvad er formålet med at bruge CommandType.Tabledirect

  2. Omdøb en mysql-procedure

  3. SQL Server - Bedste måde at få identitet for indsat række?

  4. sql - grupper efter i intervaller for at inkludere intervaller uden værdier