存储过程中的OpenQuery

时间:2018-06-19 16:12:05

标签: sql-server stored-procedures mdx openquery

我有一个只能在存储过程之外工作的OpenQuery。

这有效:

SELECT * 
FROM OpenQuery(LINKED_OLAP,
               'SELECT [Measures].[Sales] on columns FROM [Volumes] WHERE ([Calendar].[Day].&[' + convert(nvarchar(4),@Date,120) + ']&[' + DATENAME(MONTH, GETDATE()) + ']&[' + RIGHT((convert(nvarchar(10),@Date,120)),2) + ']')

当我将其放入存储过程中,然后执行该存储过程时,出现错误:

  

无法处理对象“ SELECT * FROM OpenQuery(LINKED_OLAP,'SELECT [Measures]。[Sales] on FROM [Volumes]')列”)”。链接服务器“ LINKED_OLAP”的OLE DB提供程序“ MSOLAP.5”指示该对象没有列,或者当前用户对该对象没有权限。

我有权限,并且其中有列。该查询在存储过程外部运行,为什么在调用存储过程时它不起作用?我尝试删除datename函数,并且存储过程正常工作。我怎样才能解决这个问题?我需要运行此功能。

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方法。

我没有使用DATENAME函数,而是将其传递给了一个变量:

declare @TheMonth NVARCHAR(10) = DATENAME(MONTH, GETDATE())