У меня есть запрос 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.