存储过程中的 OpenQuery

OpenQuery inside a stored procedure

我有一个只能在存储过程之外工作的 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) + ']')

当我把它放在存储过程中,然后执行存储过程时,出现错误:

Cannot process the object "SELECT * FROM OpenQuery(LINKED_OLAP,'SELECT [Measures].[Sales] on columns FROM [Volumes]')". The OLE DB provider "MSOLAP.5" for linked server "LINKED_OLAP" indicates that either the object has no columns or the current user does not have permissions on that object.

我有权限,里面有专栏。查询 运行s 在存储过程之外,为什么我调用存储过程时它不起作用?我尝试删除 datename 函数并且存储过程有效。我怎样才能解决这个问题?我需要这个功能 运行.

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

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

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