Использовать результаты запроса `exec` в качестве оператора соединения или" in "? - PullRequest
1 голос
/ 17 января 2020

У меня есть запрос, который я встроил в NVARCHAR из-за проблемы между SQL Сервером и связанным Oracle сервером, вынуждающим меня использовать OpenQuery. Он работает нормально, и я получаю результаты, которые мне нужны, когда я запускаю exec (@OPENQUERYFULL).

. Мои результаты - это один столбец чисел, который мне нужен для другого запроса. Я хотел бы иметь возможность использовать эти результаты как оператор IN () или как JOIN, но то, что я пробовал до сих пор, не удалось.

Есть ли способ использовать результаты * 1006? * запросить непосредственно в другом запросе?

ОБНОВЛЕНИЕ: Чтобы было ясно, я пытался избежать использования временной таблицы.

Ответы [ 2 ]

1 голос
/ 17 января 2020

Вы можете отправить запрос на связанный сервер с помощью OPENQUERY вместо 'exe c', построив динамический запрос c с OPENQUERY и объединением. Требуется экранирование некоторых раздражающих строк, например:

declare @oracleSQL nvarchar(max) = 'select 1 a, ''hello'' b from dual';

declare @sql nvarchar(max) = concat(
N'
with q as
(
  SELECT * FROM OPENQUERY (OracleSvr, N''', replace(@oracleSQL,'''','''''') ,N''')
)
select *
from q
cross join sys.objects o
')

print @sql 
exec ( @sql )

Но, как видите, полученный код немного сложен. Так что я почти всегда использовал бы временную таблицу.

1 голос
/ 17 января 2020

Объявите табличную переменную и вставьте результаты другого SP в эту переменную:

declare @results table (
    numbers int
);

GO

insert into @results(numbers)
exec otherSP

Затем вы выполните объединение с табличной переменной.

...