使用 EXEC 的结果创建新表

2023-12-05

我正在尝试获取结果EXEC查询并将它们放入我的 SQL Server 2017 数据库中的表中。

我知道以前也有人问过类似的问题here, here, and here,但我还没有找到有效的解决方案。

The 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 个字符限制。

尝试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”无法开始分布式事务。 而且,当我尝试将“启用分布式事务推广设置为 False”时这个帖子,我收到另一个权限错误。

简而言之,我只需要第一个的结果EXEC输入到 SQL Server 数据库的查询。这EXEC查询确实命中了一个外部 Oracle 数据库,我对该数据库只有读取权限,无法更改任何安全设置。

如有任何帮助,我们将不胜感激。


根据评论,尤其是来自 @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

既然我不能drop一个表,然后对其执行任何操作而无需重新创建它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 EXEC 的结果创建新表 的相关文章

随机推荐