Создать новую таблицу с результатами из EXEC - PullRequest
2 голосов
/ 31 мая 2019

Я пытаюсь взять результаты запроса 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

но получите ошибку:

Поставщик OLE DB "OraOLEDB.Oracle" для связанного сервера "OLAP" возвращен сообщение "Невозможно зачислить в транзакцию." Сообщение 7391, уровень 16, Состояние 2, строка 208 Операция не может быть выполнена из-за OLE DB провайдеру "OraOLEDB.Oracle" для связанного сервера "OLAP" не удалось начать распределенную транзакцию.

Попытка 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 Операция не может быть выполнено потому что поставщик OLE DB "OraOLEDB.Oracle" для связанного сервера «OLAP» не смог начать распределенную транзакцию. И, когда я пытаюсь изменить значение «Включить продвижение распределенных транзакций на False» для этой записи , я получаю ошибку другого разрешения.

Короче, мне просто нужны результаты первого запроса EXEC, введенного в базу данных SQL Server. Запрос EXEC затрагивает внешнюю базу данных Oracle, на которую у меня есть ТОЛЬКО разрешения на чтение, и я не могу изменить какие-либо параметры безопасности.

Любая помощь приветствуется.

1 Ответ

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

За комментарии, особенно от @ 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

Поскольку я не мог удалить таблицу и затем выполнить какую-либо операцию с ней, не создавая ее заново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...