Динамический эквивалент INSERT INTO с использованием EXEC - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь создать эквивалент следующего:

DROP TABLE IF EXISTS [jerry].[dbo].[purchases]
SELECT * INTO [jerry].[dbo].[purchases] FROM OPENQUERY(OLAP, '

    sql code
');

с использованием EXEC ( см. Этот вопрос здесь )

Учитывая сказанное, я не могу использовать SELECT * INTO в соответствии с несколькими источниками ( и этим )

Я нашел некоторые другие ресурсы, где я могу создать новую таблицу, используя 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, если это поможет.

1 Ответ

0 голосов
/ 10 июня 2019

Ответ можно найти в этом посте: Создать новую таблицу с результатами из EXEC

DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'sqlcode'

truncate table [jerry].[dbo].[purchases]
insert into [jerry].[dbo].[purchases]
exec ( @sqlcode ) at OLAP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...