У меня есть динамически хранимая процедура, которая создает оператор mdx для OpenQuery. Таким образом, может случиться так, что объекты из инструкции mdx пусты. В этом случае я хочу вернуть пустую строку.
Как правило, запрос работает, за исключением случаев, когда я выбираю дату из будущего, и в этом случае SQL Server дает мне эту ошибку:
"Поставщик OLE DB" XYZ "для связанного сервера" XYZ "указывает, что либо у объекта нет столбцов, либо у текущего пользователя нет разрешений на этот объект".
select
t.*
from OPENQUERY([SomeServer_OLAP],''
SELECT
non empty{[Measures].[FactWorkItemHistory Microsoft_VSTS_Scheduling_OriginalEstimate],
[Measures].[FactWorkItemHistory Microsoft_VSTS_Scheduling_CompletedWork],
[Measures].[Microsoft_VSTS_Scheduling_RemainingWork]} ON COLUMNS
, NON EMPTY { ([Work Item].[Iteration Path].[Iteration Path].ALLMEMBERS
* [Work Item].[System_AssignedTo].[System_AssignedTo].ALLMEMBERS)} on ROWS
FROM [Team System]
WHERE '+@Month+'
'') t'
Таким образом, ввод параметра даты на декабрь (месяц написания этого сообщения) отлично работает, но ввод января 2018 года (следующий месяц) и все последующие месяцы возвращает ошибку. Любая помощь приветствуется.
Удаление "непустого" из запроса устранило мою проблему. Кажется, что нет никаких непосредственных наблюдаемых недостатков.