【发布时间】:2019-05-31 12:18:09
【问题描述】:
我正在尝试创建以下等效项:
DROP TABLE IF EXISTS [jerry].[dbo].[purchases]
SELECT * INTO [jerry].[dbo].[purchases] FROM OPENQUERY(OLAP, '
sql code
');
使用EXEC(see this question here)
话虽如此,根据multiple sources(and this one),我无法使用SELECT * INTO
I have found some other resources where I can create a new table using EXEC,但是,我不知道结果表的确切结构(列数、列类型、列名等),因此它需要是动态的。
以下代码为我提供了我想要的确切结果表,但我无法弄清楚如何使用来自以下查询的结果数据创建 purchases 表:
-- 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
我尝试过使用以下方法:SELECT * INTO [jerry].[dbo].[purchases] FROM OPENROWSET('EXEC (@sqlcode) AT OLAP'),但收到错误 Incorrect syntax near ')'.
我也试过(只是想看看):
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
然后得到一个:
OLE DB provider "OraOLEDB.Oracle" for linked server "OLAP" returned message "Unable to enlist in the transaction.".
Msg 7391, Level 16, State 2, Line 208
The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" for linked server "OLAP" was unable to begin a distributed transaction.
错误。
如果这是一个简单的逻辑问题,我深表歉意——因为我对 SQL Server 还很陌生,所以我觉得我正在耗尽我的研究能力来寻找解决方案。我也在 SSMS 2017 工作,如果有帮助的话。
【问题讨论】:
-
不确定这是否有帮助,但
sp_describe_first_result_set将查询(也可能是 exec...)作为参数并返回结果集结构。 -
谢谢@GeorgeMenoutis。我不确定这是否完全解决了这个问题,但我很欣赏这条路。
-
您的问题的“分布式事务”部分有两种解决方案:stackoverflow.com/questions/6999906/…
-
不幸的是,两者都做不到 -- 不是 DBA -- 失败并出现错误 15247,缺少权限
标签: sql-server tsql dynamic-sql