我正在尝试获取EXEC
查询的结果并将其放入SQL Server 2017数据库的表中。
我知道之前曾问过类似的问题,例如here,here和here,但是我没有找到可行的解决方案。
EXEC
查询本身可以很好地运行,并且可以精确地生成我要查找的数据:
-- EXEC master.dbo.sp_serveroption @server=N'OLAP', @optname=N'rpc out', @optvalue=N'true'
DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'code'
EXEC (@sqlcode) AT OLAP
由于SQL超过8000个字符限制,我无法使用OPENQUERY
。
尝试1:
DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'sqlcode'
DROP TABLE IF EXISTS [jerry].[dbo].[purchases]
truncate table [jerry].[dbo].[purchases]
insert into [jerry].[dbo].[purchases]
exec ( @sqlcode ) at OLAP
但是得到:
找不到对象“购买”,因为它不存在或您确实 没有权限。
尝试2:
SELECT * INTO [jerry].[dbo].[purchases] FROM OPENROWSET('EXEC (@sqlcode) AT OLAP')
但出现
错误')'`附近的语法不正确。
尝试3
CREATE TABLE [jerry].[dbo].[purchases] ([Transaction_Date] DATE, [Requirement_Date] DATE, [Element] NVARCHAR(256), [Trx_Quantity] NVARCHAR(256), [Part_Number] NVARCHAR(256), [NHA_Part_Number] NVARCHAR(256), [Group] NVARCHAR(256), [Details] NVARCHAR(256)); INSERT INTO [jerry].[dbo].[purchases] EXEC (@sqlcode) AT OLAP
但出现以下错误:
链接服务器“ OLAP”的OLE DB提供程序“ OraOLEDB.Oracle”返回 消息“无法参加交易。”。讯息7391,等级16 状态2,行208无法执行此操作,因为OLE DB 链接服务器“ OLAP”的提供程序“ OraOLEDB.Oracle”无法 开始分布式交易。
尝试4
DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'sql'
DROP TABLE IF EXISTS [jerry].[dbo].[report]
CREATE TABLE [jerry].[dbo].[report] ([Transaction_Date] DATE, [Requirement_Date] DATE, [Element] NVARCHAR(256), [Trx_Quantity] NVARCHAR(256), [Part_Number] NVARCHAR(256), [NHA_Part_Number] NVARCHAR(256), [Group] NVARCHAR(256), [Details] NVARCHAR(256));
insert into [jerry].[dbo].[report]
exec ( @sqlcode ) at OLAP
但是我得到一个错误:
消息7391,第16级,状态2,第209行无法执行该操作 执行此操作是因为链接服务器的OLE DB提供程序“ OraOLEDB.Oracle” “ OLAP”无法开始分布式事务。 而且,当我尝试根据this post更改“将分布式事务的启用提升设置为False”时,我得到另一个权限的错误。
简而言之,我只需要输入到SQL Server数据库中的第一个EXEC
查询的结果。 EXEC
查询的确访问了我仅具有读取权限且无法更改任何安全设置的外部Oracle数据库。
感谢您的协助。
答案 0 :(得分:0)
根据评论,特别是@Larnu的评论
DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'sqlcode'
DROP TABLE IF EXISTS [jerry].[dbo].[purchases]
truncate table [jerry].[dbo].[purchases]
insert into [jerry].[dbo].[purchases]
exec ( @sqlcode ) at OLAP
几乎正确,但需要切换到
DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'sqlcode'
truncate table [jerry].[dbo].[purchases]
insert into [jerry].[dbo].[purchases]
exec ( @sqlcode ) at OLAP
因为我不能删除表,然后在不重新创建表的情况下对其执行任何操作。