web-dev-qa-db-ja.com

複数のキーのOPENQUERYでSQL Serverテーブルを結合する

複数のキーでOracleリンクサーバーテーブル(10億行)とSQL Serverテーブル(100行)を結合する必要があります。

SELECT * FROM OPENQUERY(EDW, 'SELECT * FROM Oracle_TABLE') A
INNER JOIN SQL_TABLE B
ON A.KEY1 = B.KEY1 AND A.KEY2 = B.KEY2
INNER JOIN SQL_TABLE C
ON A.KEY3 = C.KEY1 AND A.KEY4 = C.KEY2;

しかし、Oracle_TABLEは非常に巨大であり、このクエリの実行には時間がかかりすぎます。 SQL_TABLEをOPENQUERYに渡し、Oracleサーバーで結合を行う方法はありますか?

1
Fan

OK、そして逆に考えます。一般的な概要のようなもの:

  1. OracleからSQL ServerおよびSQL ServerからOracleへのリンクサーバーを作成します。
  2. OracleからSQL Serverデータの100行を選択し、Oracleの一時テーブルに格納します。
  3. Oracleでクエリを実行して、一時テーブルの100のSQL Server行による10億のOracle行を結合/フィルタリング/何でもして、結果セットを作成します。
  4. SQL ServerからOPENQUERYを使用して、結果をSQL Serverに戻します。
INSERT INTO SqlServerTable 
  SELECT * FROM OPENQUERY (LinkedServerName, 'query text');

いくつかのステップを逃した可能性がありますが、この基本的なアプローチは、少量のSQL ServerデータをOracleに移動し、クエリを実行して、結果をSQL Serverに読み取ります。

[〜#〜]編集[〜#〜]https://stackoverflow.com/questions/29200147/how-do -i-convert-an-Oracle-timestamp-data-type-to-sql-server-datetime2-data-typeJon of All Trades彼がOracle timestampをSQL Serverに変換する方法を示しましたdatetime2

(ただし、テストするOracleサーバーはありません。)

1
RLF

REMOTEhint が機能するかどうかを確認してください。

SELECT * FROM  SQL_TABLE B
INNER REMOTE JOIN linkedServerName.dbname.schema.Oracle_TABLE A
ON A.KEY1 = B.KEY1 AND A.KEY2 = B.KEY2
INNER JOIN SQL_TABLE C
ON A.KEY3 = C.KEY1 AND A.KEY4 = C.KEY2
0
a1ex07