Могут ли EXEC и Select Into работать вместе? - PullRequest
0 голосов
/ 20 сентября 2018

Я выполняю следующую инструкцию для получения результата с удаленного сервера

EXEC  ( @var)  AT [linkedservername] 

Примечание: @var содержит запрос на выборку для запуска на связанном сервере.Linkedserver - это сервер DB2.

Я хотел бы сохранить результат в временный файл.

Возможно ли это?

Можем ли мы достичь, как показано ниже?

EXEC  ( @var)  AT [linkedservername]  into #t

- Обновление для провайдера подробнеесвязанный сервер.

теперь мне нужно сохранить его в режиме temptable

DECLARE @FileContents  VARCHAR(MAX)

SELECT @FileContents=BulkColumn
FROM   OPENROWSET(BULK'E:\ADDRESS.txt',SINGLE_BLOB) x;

set @FileContents = Replace(@FileContents,'''''','''')

set @FileContents = @FileContents + ' FETCH FIRST 1 ROWS only'

EXEC    ( @FileContents)  AT [linkedservername]   

Мне нужно что-то вроде ниже,

select * from (
    EXEC    ( @FileContents)  AT [linkedservername]   )

1 Ответ

0 голосов
/ 20 сентября 2018

Обновлено для новой информации.

Ответ - нет, если вы пытаетесь это сделать.Если вы уже знаете структуру, сначала создайте временную таблицу.Возможно, вам придется изменить настройки RPC и DTC, чтобы звонок работал.

CREATE TABLE #temp
(<Table definition for your results>)

DECLARE @var VARCHAR(100)= 'your command'

INSERT INTO #temp EXEC (@var) AT TRANSACCOUNT

SELECT * FROM #temp

Если структура вам неизвестна, вы можете использовать OPENROWSET или OPENQUERY для генерации таблицы на лету.

Openquery:

SELECT  * 
INTO #temp FROM    
OPENQUERY(targetServer, 'your command')

Openrowset:

SELECT  * INTO
  #temp
FROM
  OPENROWSET(
    'SQLNCLI',
    'Server=targetServer;Trusted_Connection=yes;',
    'your command'
)
SELECT * FROM #temp

Для OPENQUERY и OPENROWSET требуются строковые литералы, поэтому, если вам нужно динамически установить базовую команду, вам также необходимо создать вызов OPENROWSET.Контекст вызова также изменит контекст любой временной таблицы, так что вы можете использовать временную постоянную таблицу для хранения ваших результатов, например:

DECLARE @var VARCHAR(100)= 'your command'
DECLARE @command VARCHAR(MAX)

SELECT @command = CONCAT(
'SELECT  * INTO  temporaryTable
FROM
  OPENROWSET(
    ''SQLNCLI'',
    ''Server=targetServer;Trusted_Connection=yes;'',
    ''', @var,'''
)')
EXEC (@command)
SELECT * FROM temporaryTable
...