異なるサーバー上の2つのデータベースの2つのテーブルを結合してデータをクエリする 質問する

異なるサーバー上の2つのデータベースの2つのテーブルを結合してデータをクエリする 質問する

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

ベストアンサー1

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

チェックしてくださいOPENQUERY のドキュメントさらにいくつかの例を参照してください。上記の例はかなり不自然です。この特定の例では間違いなく最初の方法を使用しますが、OPENQUERYクエリを使用して一部のデータをフィルター処理する場合は、2 番目のオプションを使用すると時間とパフォーマンスを節約できます。

おすすめ記事