Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak porównać dane między dwiema tabelami w różnych bazach danych przy użyciu 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

Kod testowy:

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

Wynik:

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

Uwaga:porównanie dużej tabeli może zająć dużo czasu podczas opracowywania "dostrojonego" rozwiązania lub refaktoryzacji, które da taki sam wynik jak REFERERCE - warto najpierw sprawdzić proste parametry:jak

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

Gdy to jest puste, prawdopodobnie masz wszystko pod kontrolą i być może możesz zmodyfikować, gdy się nie powiedzie, zobaczysz "stałe wartości FROM T_REF" do wstawienia, aby zaoszczędzić jeszcze więcej czasu na następne sprawdzenie!!!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć najwolniejsze zapytania

  2. SQL 2005 — wyszukiwanie tekstu w procedurach składowanych (nie cały tekst jest przeszukiwany)

  3. 4 wskazówki dotyczące konfigurowania alertów serwera SQL

  4. SQL Server zmienia czcionkę w ciągu html

  5. Trzykolumnowy SQL PIVOT