1. ホーム
  2. sql

[解決済み] 異なるサーバーにある2つのデータベースの2つのテーブルを結合してデータを問い合わせる

2022-08-28 12:18:16

質問

異なるサーバー上の2つのデータベースに2つのテーブルがあり、私はいくつかのクエリを作成するためにそれらを結合する必要があります。どのようなオプションがありますか?私は何をすべきですか?

どのように解決するには?

この問題を解決するには sp_addlinkedserver を使用してサーバーリンクを作成します。 を参照してください。 の参照ドキュメント を参照してください。 サーバーのリンクが確立したら、データベース名の前にもう一方のサーバーを付けるだけで、通常通りクエリを作成します。 すなわち

-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
        ON tab1.ID = tab2.ID

リンクが確立されたら、さらに OPENQUERY を使って、リモートサーバで SQL 文を実行し、データのみをあなたに転送することもできます。 これは少し速くなり、リモート サーバーにクエリを最適化させることができます。 データを一時的な (あるいはメモリ内の) テーブルにキャッシュして DB1 にキャッシュしておけば、 標準のテーブルを操作するのと同じように問い合わせができるようになります。 例えば

-- Fetch data from the other database server
SELECT *
INTO #myTempTable
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]')

-- Now I can join my temp table to see the data
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID

をチェックアウトして のドキュメントを参照してください。 のドキュメントを参照してください。 上の例はかなり作為的なものです。 私なら、この具体的な例では間違いなく最初の方法を使いますが、2番目の方法として OPENQUERY を使用すると、いくつかのデータをフィルタリングするためにクエリを使用する場合、いくつかの時間とパフォーマンスを節約することができます。