0

OracleデータベースにリンクされているSQLServer2005データベースがあります。私がやりたいのは、クエリを実行してID番号をいくつか引き出し、Or​​acleにあるID番号を見つけることです。

したがって、このクエリの結果を取得したいと思います。

SELECT pidm
FROM sql_server_table

そして、次のようにしてOracleデータベースにクエリを実行します(前のクエリの結果が@pidmsに格納されていると仮定します)。

OPENQUERY(oracledb,
'
SELECT pidm
FROM table
WHERE pidm IN (' +
@pidms + ')')
GO

しかし、私はこれを行うための良い方法を考えるのに苦労しています。これら2つと同様のクエリの内部結合を実行できると思います。残念ながら、限られた時間枠内にプルするレコードがたくさんあるので、それを選択するのに非常にパフォーマンスの高いオプションになるとは思いません。

助言がありますか?理想的には、できるだけ少ない動的SQLでこれを実行したいと思います。

4

4 に答える 4

2

ああ、pidms。悪い思い出をよみがえらせます!:)

参加することもできますが、次のようにします。

select sql.pidm,sql.field2 from sqltable as sql
inner join
(select pidm,field2 from oracledb..schema.table) as orcl
on 
sql.pidm = orcl.pidm

sqlからテーブル変数を取得するPL/SQLプロシージャを記述できるかどうかはわかりませんが、多分.....いいえ、疑わしいです。

于 2009-01-09T21:28:58.863 に答える
1

openqueryの結果を一時テーブルに格納してから、SQLテーブルと一時テーブルの間で内部結合を実行します。

于 2009-01-09T20:53:02.867 に答える
1

OPENQUERY は純粋な文字列を必要とするため(上​​で書いたように)、結合を行うことはできないと思います。

于 2009-01-09T20:53:44.487 に答える
0

BG: 実際、OpenQuery による SQLServer から Oracle への JOIN は機能し、#tmp テーブルを回避し、Param* なしで SQL への JOIN を許可します。

[SQL SP] LEFT JOIN OPENQUERY(ORADB,
'SELECT  COUNT(distinct O.ORD_NUM) LCNT, 
 O.ORD_MAIN_NUM  
 FROM CUSTOMER.CUST_FILE C
 JOIN CUSTOMER.ORDER_NEW O 
 ON C.ID = O.ORD_ID
 WHERE  C.CUS_ID NOT IN (''2'',''3'') 
 GROUP BY O.ORD_MAIN_MACNUM') LC 
 ON T.ID = LC.ORD_MAIN_ID* 

乾杯、ビル・ギブス

于 2014-01-07T17:13:52.017 に答える