Получить результат запроса MDX связанного сервера через EXEC в CTE - PullRequest
0 голосов
/ 17 октября 2018

У меня есть запрос SQL, который использует OPENQUERY для выполнения запроса MDX на связанном сервере, но этот запрос становится очень большим, и OPENQUERY имеет ограничение в 8000 символов.Из того, что я искал, EXEC не имеет такого ограничения, но я не могу получить результаты этого для использования в моем запросе.

Вот упрощенный пример того, что мне нужно сделать (используя OPENQUERY):

WITH MdxQuery (field1,field2,field3) AS (
    SELECT field1, field2, field3
    FROM OPENQUERY(my_linked_server, 'my_long_mdx_query')
)
SELECT * FROM MdxQuery

Я пытался использовать переменные, подобные этой:

Declare @TempTable TABLE (
     field1 varchar(max),
     field2 varchar(max),
     field3 varchar(max)
)
Declare @strMDX varchar(max)
set @strMDX = N'my_long_mdx_query'

EXEC sp_serveroption 'my_linked_server', 'remote proc transaction promotion', 'false'

INSERT INTO @TempTable (
    field1,
    field2,
    field3
) EXEC (@strMDX) at my_linked_server

WITH MdxQuery (field1,field2,field3) AS (
    SELECT field1, field2, field3
    FROM @tempTable
)
SELECT * FROM MdxQuery

Но он вызывает синтаксическую ошибку в WITH, так как это не разрешено после EXEC.

РЕДАКТИРОВАТЬ Также выдавалась следующая ошибка:

The requested operation could not be performed because OLE DB provider "MSOLAP" for linked server "my_linked_server" does not support the required transaction interface.

Эта ошибка была устранена путем добавления этой строки перед вставкой:

EXEC sp_serveroption 'my_linked_server', 'remote proc transaction promotion', 'false'

Но я все еще не могу выполнитьЗапрос CTE после EXEC.

1 Ответ

0 голосов
/ 19 октября 2018

Попробуйте добавить точку с запятой (;) перед С.

...