我正在尝试获取EXEC查询结果并将其放入SQL Server 2017数据库中的表中。
EXEC
该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
OPENQUERY由于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无法执行此操作,因为链接服务器“ OLAP”的OLE DB提供程序“ 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无法执行该操作,因为链接服务器“ OLAP”的OLE DB提供程序“ OraOLEDB.Oracle”无法启动分布式事务。并且,当我尝试更改此帖子的“将分布式事务的启用提升设置为False”时,我得到另一个权限的错误。
简而言之,我只需要EXEC输入到SQL Server数据库中的第一个查询的结果。该EXEC查询确实命中了我仅具有读取权限的外部Oracle数据库,并且无法更改任何安全设置。
任何帮助表示赞赏。
根据评论,特别是@Larnu的评论
几乎是正确的,但需要切换到
DECLARE @sqlcode VARCHAR(MAX) SET @sqlcode = 'sqlcode' truncate table [jerry].[dbo].[purchases] insert into [jerry].[dbo].[purchases] exec ( @sqlcode ) at OLAP
由于我无法 删除 表,然后对表执行任何操作而不重新创建它。