Использование результатов запроса в OPENQUERY

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

Можно ли добавить сервер Oracle в качестве связанного сервера, чтобы можно было использовать синтаксис объединения вместо вызова OPENQUERY?

cmsjr 10.01.2009 02:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
2 810
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Но разве это не потянет за собой всю таблицу, если я не знаю идентификаторы, которые мне нужны из первого запроса?

Jason Baker 10.01.2009 00:07

Я не думаю, что вы можете выполнить соединение, поскольку для 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* 

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

Другие вопросы по теме