web-dev-qa-db-ja.com

openqueryを使用しながらリンクサーバーテーブルとSQLサーバーテーブルを結合する方法

リンクサーバーからデータを読み取るためにopenquery構文を使用します。

SELECT * FROM OPENQUERY(LinkServer, 'SELECT * FROM Product')

このリンクサーバーテーブルをSQLサーバーテーブルと結合して、最終結果を取得したいと思います。今のところ、私は一時テーブルを持ってそれを行います。

SELECT * 
INTO #Temp_Products
FROM OPENQUERY(TREPO, 'SELECT ID, Name FROM Products')

SELECT * FROM #TEMP_PRODUCTS A
INNER JOIN ORDERED_PRODUCTS B
ON A.ID = B.ID

ただし、リンクサーバーの製品テーブルには膨大なレコードが含まれているため、一時テーブルに入力されるまでに時間がかかります。したがって、すべての製品情報を取得するのではなく、事前に両方のテーブルを結合すると、パフォーマンスが向上する可能性があると思います。

これはできますか?誰かが助けることができますか?

6
Muthukumar

これをテストする機能はありませんが、リモートサーバーに直接参加することで#tempTableオプションをバイパスする機会があります(そのような接続が可能な場合)

SELECT  A.* 
  FROM  OPENQUERY(TREPO, 'SELECT ID, Name FROM Products') A
 INNER 
  JOIN  ORDERED_PRODUCTS B
    ON  A.ID = B.ID

リンクされたサーバークエリに関するいくつかの情報へのリンクと、発生する可能性のあるいくつかの落とし穴は次のとおりです。 http://sqlblog.com/blogs/linchi_shea/archive/2009/11/06/bad-database-practices- abusing-linked-servers.aspx

17
EastOfJupiter