我正在运行以下语句以从远程服务器获取结果
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] )
答案 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