报表生成器未列出使用exec(@customquery)进行输出的查询中的任何字段



使用SSMS,下面的代码运行得非常好。当我将代码输入SSRS中的数据集时,报表数据视图不会显示exec((函数输出的任何字段。我在报告的其他区域使用这些字段进行筛选和排序,因此报告当前已损坏。我已经研究了这里的其他问题,但它们没有解决这种情况。如果有一种方法可以将这个查询存储为存储过程,然后在SSRS中调用它,这对我来说很有效。我只是不知道如何做到这一点。

Declare @YR2 VARCHAR(MAX), @YR1 VARCHAR(MAX)
Declare @MT2 VARCHAR(MAX), @MT1 VARCHAR(MAX)
Declare @Query VARCHAR(MAX)
SET @YR2 = YEAR(dateadd(month, datediff(month, 0, getdate())-2, 0))
SET @YR1 = YEAR(dateadd(month, datediff(month, 0, getdate())-1, 0))
SET @MT2 = FORMAT(MONTH(dateadd(month, datediff(month, 0, getdate())-2, 0)),'00')
SET @MT1 = FORMAT(MONTH(dateadd(month, datediff(month, 0, getdate())-1, 0)),'00')
Set @Query = 'Select * FROM 
(Select '+@MT2+'.'+@YR2+' as [Starting Point],ACCT_NBR as [Account],NBR_DUE From dbo.EOM_DB99_CalculatedValues_' 
+ @YR2 + @MT2 + ' UNION ALL
Select '+@MT1+'.'+@YR1+' as [Starting Point],ACCT_NBR as [Account],NBR_DUE From dbo.EOM_DB99_CalculatedValues_' 
+ @YR1 + @MT1 + ') a Where a.Account IN (Accounts)'
Exec(@Query)

我需要自动化一个总是使用数据库中前两个EOM表的报告,这是我在SSMS中工作的唯一方法。现在我只需要它在报表生成器2014中工作。我对想法持开放态度!

输出

SSRS可能无法在不执行查询的情况下确定字段,您可以做两件事。。

注意:两者都假定字段名和数据类型始终相同。SSRS每次都期望相同的结果结构。

选项1:

创建一个具有所需结构的临时表,并像这样将结果粘贴在那里(根据需要交换列名和数据类型(

...
Set @Query = 'Select * FROM 
(Select '+@MT2+'.'+@YR2+' as [Starting Point],ACCT_NBR as [Account],NBR_DUE From dbo.EOM_DB99_CalculatedValues_' 
+ @YR2 + @MT2 + ' UNION ALL
Select '+@MT1+'.'+@YR1+' as [Starting Point],ACCT_NBR as [Account],NBR_DUE From dbo.EOM_DB99_CalculatedValues_' 
+ @YR1 + @MT1 + ')'
...
CREATE TABLE #t (StartingPoint varchar(10), Account varchar(20), NBR_DUE INT)
INSERT INTO #t
EXEC(@Query)
SELECT * FROM #t WHERE Account IN (@Accounts)

注意:@账户是一个多值参数p[从报告中传入。

由于#t的结构是在查询中定义的,SSRS将毫无问题地接受这一点。正如我所说,您将不得不更改数据类型和名称以适应,但希望这将为您提供足够的信息来解决问题。

选项2:

手动将所有字段添加到数据集中-我"认为"这会奏效,但我还没有尝试过

最新更新