2017-10-08 9 views
0

同じコンピュータに複数のバージョンのデータベースがあります。これらは同じ DB名、フィールド、およびテーブル名を持っています。私は1つのSQL文で2つのデータベースにアクセスする方法(テーブル名、DB名は同じ)OLEDB

私は希望(サーバーを使用していない)のが私のPC上で、私は2つの異なるデータベースへの2つの接続を持っているいくつかの違い(すなわち追加のレコード、またはフィールド値の変更)

を有することができる別のDBとして、それらをマージしようとしています(これは、2つの異なるテーブルにアクセスするためのテーブルを修飾する方法の一例を示すために含まれている。)

次のような

(SELECT * FROM [].DB1Table EXCEPT SELECT * FROM [].DB2Table) 
UNION ALL 
(SELECT * FROM [].DB2Table EXCEPT SELECT * FROM [].DB1Table) 

私が見てきた解決策:のようなSQLを使用して差分を取得するために2つのDBにアクセスしたいです

select t1.ID, t1.Name, t2.Name 
from [DBOne].[dbo].[TableOne] as t1 
inner join [DBbTwo].[dbo].[TableTwo] as t2 on t1.ID = t2.ID 

私は2つのテーブル間の差異を取得しようとしています。[SELECTからFROM DB2TableからSELECT]を選択し、差異をマージして ですが、VB NetでOLEDB DB接続を使用する方法がわかりません。 (両方のデータベースがアクセスデータベースです)

これを行う方法はありますか?

+1

接続は1つのDBに接続します。他のDBにテーブルをリンクしてインポートする方法はありますが、あなたが何をしようとしているのかは不明です。 JOINとUNIONは2つの異なるものです。また、タグの選択肢にカーソルを置き、再検討してください。 [質問]を読んで[ツアー]を受けてください – Plutonix

+0

異なるSQLサーバーにある単一クエリを使用してテーブルを比較することはできません。 –

+0

@AKUNinリンクされたサーバーで、またはパフェの答えに示されているようにすることができます。 –

答えて

1

MS Access SQLダイアレクトの利用可能な機能であるクエリに対してインラインで外部データベースに接続することを検討してください。一致しないレコードを検索するには、NOT EXISTS句を使用します。以下は1つの接続がのDB1と仮定します。ここで、のDB2のテーブルは外部から参照されます。

SELECT * FROM myTable t1 
WHERE NOT EXISTS 
    (SELECT 1 FROM myTable t2 IN 'C:\Path\To\External\Database.accdb' 
    WHERE t1.ID = t2.ID) 

UNION 

SELECT * FROM myTable t2 IN 'C:\Path\To\External\Database.accdb' 
WHERE NOT EXISTS 
    (SELECT 1 FROM myTable t1 
    WHERE t2.ID = t1.ID) 
+0

私はこれを試しています - 報告する – Alan

関連する問題