EXEC和Select Into可以一起工作吗?

时间:2018-09-20 10:46:43

标签: sql tsql sql-server-2014

我正在运行以下语句以从远程服务器获取结果

EXEC  ( @var)  AT [linkedservername] 

注意: @var保存选择查询以在链接服务器上运行。 Linkedserver是DB2服务器。

我想将结果保存到模板中。

有可能吗?

我们可以实现以下目标吗?

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

-正在更新提供者的更多信息。

我想到了,

  

从文件中读取查询。

     

使用链接服务器在所需的DB2服务器中执行它。

     

现在我需要将其保存在模板中

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 :(得分:3)

已更新以获取新信息。

答案是否定的。 如果您已经知道结构,请首先创建临时表。您可能必须更改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调用。调用的上下文也会更改任何临时表的上下文,因此您可以使用 temporary 永久表来存储结果,如下所示:

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