当前位置: 首页 > 面试题库 >

使用EXEC的结果创建新表

钱雅逸
2023-03-14
问题内容

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

我知道之前曾在这里,这里和这里询问过类似的问题,但是我没有找到有效的解决方案。

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无法执行此操作,因为链接服务器“ 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'

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

由于我无法 删除 表,然后对表执行任何操作而不重新创建它。



 类似资料:
  • 问题内容: 我有一个仅向写入数据的脚本。我需要为多个文件运行它,并为每个输入文件生成一个不同的输出文件,我想知道如何使用它。因此,我基本上尝试了几种变体(出于测试目的,我将脚本替换为): 但由于所有数据都被写入了名为的文件中,因此无法正常工作。 最终,我可以使用它: 但是,尽管这种最新形式可以很好地使用,但我的脚本需要通过多个初始化脚本加载环境变量,因此我最终得到了: 这似乎很浪费,因为我已经在当

  • 问题内容: 我有两个表:tbl_listings,其列为:prop_id; 另一个表:tbl_bookings,其列为:prop_id,booking_date。 我想编写一个查询,计算prop_id在tbl_bookings中出现的所有时间,然后用该查询的结果填充tbl_listings中的新列。 我的查询看起来像: 但由于某种原因,我收到一条错误消息:子查询返回多于1行。我该如何解决? 问题答

  • 我知道我们可以使用火花jdbc从现有的mysql表中读写数据。但是我们甚至可以创建mysql表并使用数据框插入数据吗?当我尝试加载文件到数据框,并尝试写入不存在的表我面临空指针异常。以下是错误: JAVAorg上的lang.NullPointerException。阿帕奇。火花sql。处决数据源。jdbc。JdbcRelationProvider。在org上创建关系(jdbrelationprov

  • 问题内容: 我是新手,似乎无法工作 可以在等程序中实现。当我尝试在程序中运行此语句时,出现了。 我在文档页面中检查了Derby Db Create Statements ,但是找不到这样的选择。 问题答案: 创建表,捕获并检查SQL状态代码。 完整的错误代码列表可以在这里 找到, 但我找不到 ;大概是 。 您需要的代码是。 只需运行一次代码并打印错误代码。不要忘记添加测试以确保代码有效。这样,您可

  • 问题内容: 我认为标题的答案通常是去阅读文档,但是我遍历了NLTK书,但没有给出答案。我是Python的新手。 我有很多文件,我希望能够使用NLTK为语料库提供的语料库功能。 我已经尝试过,但是我无法超越: 如何使用punkt分割句子?我尝试使用punkt函数,但punkt函数无法读取类? 您还可以引导我介绍如何将分段数据写入文本文件吗? 问题答案: 我认为,至少在您的输入语言是英语的情况下,已经

  • PooledObjectFactory的创建方法没有参数 https://commons.apache.org/proper/commons-pool/api-2.4.2/org/apache/commons/pool2/BasePooledObjectFactory.html#create-- 如果我的Foo类定义是: 这个Foo可以通过公共池汇集吗? 谢谢你的任何建议