sql >> データベース >  >> RDS >> Sqlserver

Sql Server 2008を使用して異なるデータベースの2つのテーブル間でデータを比較するには?

    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
      

    テストコード:

    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
      

    結果:

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

    注:「調整された」ソリューションまたはリファクタリングを開発する場合、REFERERCE と同じ結果が得られる大きなテーブルを比較するには長い時間がかかる場合があります。

    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
      

    これが空の場合、おそらく制御下にあり、失敗したときに変更できる可能性があります。「T_REF からの定数値」が表示され、次のチェックの時間をさらに節約できます!!!



    1. データベース設計で主キーとしてユーザー名を使用するのは悪いことですか?

    2. MySQL:INTをDATETIMEに変換します

    3. 毎月の時間ごとにラベルでユーザーをマーク

    4. if(!isset($ _ SESSION ['username']))により、ユーザーはverify_login_form.phpからindex.phpにリダイレクトされます。