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