Используйте TRY / CATCH в вашей хранимой процедуре, вы заметите, что для вашей проблемы есть определенный номер ошибки, поэтому проверьте номер ошибки и, если это так, верните пустой набор результатов. Как вы уже определили таблицу, это будет проще.
Псевдокод выглядит примерно так:
SET @mdx = '{some dynamic MDX}'
SET @sql = 'SELECT a.* FROM OpenQuery(LinkedAnalysisServer, ''' + @mdx + ''') AS a'
BEGIN TRY
INSERT INTO #result
EXEC sp_executesql @sql
END TRY
BEGIN CATCH
IF ERROR_NUMBER <> 'The error number you are seeing'
BEGIN
RAISERROR('Something happened that was not an empty result set')
END
END CATCH
SELECT * FROM #result
Вы захотите проверить эту конкретную ошибку, чтобы вы не возвращали пустые наборы результатов, например, при сбое вашего сервера SSAS.