У меня есть база данных 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.





Сохраните результаты openquery во временной таблице, а затем выполните внутреннее соединение между таблицей SQL и временной таблицей.
Но разве это не потянет за собой всю таблицу, если я не знаю идентификаторы, которые мне нужны из первого запроса?
Я не думаю, что вы можете выполнить соединение, поскольку для OPENQUERY требуется чистая строка (как вы писали выше).
Аааа, пидмс. Возвращает плохие воспоминания! :)
Вы можете выполнить соединение, но сделайте это так:
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 ... но, возможно ... нет, я сомневаюсь в этом.
BG: На самом деле JOIN IN SQL Server to 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*
Ура, Билл Гиббс
Можно ли добавить сервер Oracle в качестве связанного сервера, чтобы можно было использовать синтаксис объединения вместо вызова OPENQUERY?