Использование результатов запроса в OPENQUERY - PullRequest
0 голосов
/ 09 января 2009

У меня есть база данных SQL Server 2005, которая связана с базой данных Oracle. Я хочу выполнить запрос, чтобы извлечь из него некоторые идентификационные номера, а затем выяснить, какие из них есть в Oracle.

Итак, я хочу взять результаты этого запроса:

SELECT pidm
FROM sql_server_table

И сделать что-то подобное для запроса базы данных Oracle (при условии, что результаты предыдущего запроса сохранены в @pidms):

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

Но мне трудно думать о хорошем способе сделать это. Я полагаю, что я мог бы сделать внутреннее объединение запросов, похожих на эти два. К сожалению, есть много записей, которые нужно извлечь за ограниченный период времени, поэтому я не думаю, что это будет очень эффективный выбор.

Есть предложения? В идеале я хотел бы сделать это с как можно меньшим количеством динамического SQL.

Ответы [ 4 ]

1 голос
/ 09 января 2009

Я не думаю, что вы можете сделать объединение, так как OPENQUERY требует чистой строки (как вы написали выше).

1 голос
/ 10 января 2009

Аааа, пидмс. Возвращает плохие воспоминания! :)

Вы могли бы сделать соединение, но вы бы сделали это так:

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

Я не уверен, что вы могли бы написать процедуру PL / SQL, которая бы взяла табличную переменную из sql ... но, возможно, ..... нет, я сомневаюсь в этом.

1 голос
/ 09 января 2009

Сохраните результаты openquery во временной таблице, затем выполните внутреннее соединение между таблицей SQL и временной таблицей.

0 голосов
/ 07 января 2014

BG: На самом деле JOIN IN SQLServer к Oracle с помощью OpenQuery работает, избегая таблицы #tmp и позволяя JOIN to SQL без Param * - ex.

[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* 

Ура, Билл Гиббс

...