Я пытаюсь создать эквивалент следующего:
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, если это поможет.
Спасибо @GeorgeMenoutis. Я не уверен, что это полностью решает эту проблему, но я ценю путь, по которому нужно следовать.
Два решения для части «распределенной транзакции» вашего вопроса можно найти здесь: stackoverflow.com/questions/6999906/…
К сожалению, тоже не может - не администратор базы данных - сбой с ошибкой 15247, отсутствие разрешений





Ответ можно найти в этом посте: Создать новую таблицу с результатами из EXEC
DECLARE @sqlcode VARCHAR(MAX)
SET @sqlcode = 'sqlcode'
truncate table [jerry].[dbo].[purchases]
insert into [jerry].[dbo].[purchases]
exec ( @sqlcode ) at OLAP
Не уверен, что это поможет, но
sp_describe_first_result_setпринимает запрос (вероятно, exec... тоже) в качестве параметра и возвращает структуру набора результатов.