EXEC 和 Select Into 可以一起工作吗?
Could EXEC and Select Into work together?
我运行正在执行以下语句以从远程服务器获取结果
EXEC ( @var) AT [linkedservername]
注意:
@var 在链接服务器上保存 select 对 运行 的查询。
Linkedserver 是 DB2 服务器。
我想将结果保存到模板中。
可能吗?
我们可以像下面这样实现吗?
EXEC ( @var) AT [linkedservername] into #t
-- 更新提供者更多信息。
我想到了这个,
read query from file.
execute it in desired DB2 server using linked server.
now i need to save it in a 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] )
更新了新信息。
对于您尝试这样做的方式,答案是否定的。
如果您已经知道结构,请先创建临时 table。您可能必须更改 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 即时生成 table。
打开查询:
SELECT *
INTO #temp FROM
OPENQUERY(targetServer, 'your command')
打开行集:
SELECT * INTO
#temp
FROM
OPENROWSET(
'SQLNCLI',
'Server=targetServer;Trusted_Connection=yes;',
'your command'
)
SELECT * FROM #temp
OPENQUERY 和 OPENROWSET 需要字符串文字,因此如果您需要动态设置基本命令,则还需要构建 OPENROWSET 调用。调用的上下文也会更改任何临时 table 的上下文,因此您可以使用 临时 永久 table 来存储您的结果,如下所示:
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
我运行正在执行以下语句以从远程服务器获取结果
EXEC ( @var) AT [linkedservername]
注意: @var 在链接服务器上保存 select 对 运行 的查询。 Linkedserver 是 DB2 服务器。
我想将结果保存到模板中。
可能吗?
我们可以像下面这样实现吗?
EXEC ( @var) AT [linkedservername] into #t
-- 更新提供者更多信息。
我想到了这个,
read query from file.
execute it in desired DB2 server using linked server.
now i need to save it in a 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] )
更新了新信息。
对于您尝试这样做的方式,答案是否定的。 如果您已经知道结构,请先创建临时 table。您可能必须更改 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 即时生成 table。
打开查询:
SELECT *
INTO #temp FROM
OPENQUERY(targetServer, 'your command')
打开行集:
SELECT * INTO
#temp
FROM
OPENROWSET(
'SQLNCLI',
'Server=targetServer;Trusted_Connection=yes;',
'your command'
)
SELECT * FROM #temp
OPENQUERY 和 OPENROWSET 需要字符串文字,因此如果您需要动态设置基本命令,则还需要构建 OPENROWSET 调用。调用的上下文也会更改任何临时 table 的上下文,因此您可以使用 临时 永久 table 来存储您的结果,如下所示:
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