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

Hvordan sammenligner man data mellem to tabeller i forskellige databaser ved hjælp af SQL Server 2008?

select * 
from (
      select 'T1' T, *
      from DB1.dbo.Table
      except
      select 'T2' T, *
      from DB2.dbo.Table
     ) as T
union all
select * 
from (
      select 'T2' T, *
      from DB2.dbo.Table
      except
      select 'T1' T, *
      from DB1.dbo.Table
     ) as T
ORDER BY 2,3,4, ..., 1  -- make T1 and T2 to be close in output 2,3,4 are UNIQUE KEY SEGMENTS

Testkode:

declare @T1 table (ID int)
declare @T2 table (ID int)

insert into @T1 values(1),(2)
insert into @T2 values(2),(3)

select * 
from (
      select *
      from @T1
      except
      select *
      from @T2
     ) as T
union all
select * 
from (
      select *
      from @T2
      except
      select *
      from @T1
     ) as T

Resultat:

ID
-----------
1
3

Bemærk:Det kan tage lang tid at sammenligne store tabel, når man udvikler "tunet" løsning eller refactorig, hvilket vil give samme resultat som REFERERCE - det kan være klogt at tjekke simple parametre først:like

select count(t.*) from (
   select count(*) c0, SUM(BINARY_CHECKSUM(*)%1000000) c1 FROM T_REF_TABLE 
   -- select 12345 c0, -214365454 c1 -- constant values FROM T_REF_TABLE 
   except 
   select count(*) , SUM(BINARY_CHECKSUM(*)%1000000) FROM T_WORK_COPY 
) t

Når dette er tomt, har du sandsynligvis tingene under kontrol, og du kan muligvis ændre, når du fejler, vil du se "konstante værdier FRA T_REF" til isert for at spare endnu mere tid til næste kontrol!!!



  1. Værelse bedste måder at oprette sikkerhedskopier til offline applikation?

  2. jquery ajax-kald for at indstille valgmuligheder fra en MySql-tabel

  3. viser data fra sql ved at klikke på svg-kort

  4. SQL:Hvordan ville du opdele 100.000 poster fra en Oracle-tabel i 5 bidder?