Report Builder 未列出使用 exec(@customquery) 输出的查询中的任何字段

Report Builder not listing any fields from query using exec(@customquery) to output

使用 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)

我需要自动化一个始终使用数据库中前 2 个 EOM 表的报告,这是我让它在 SSMS 中工作的唯一方法。现在我只需要它在 Report Builder 2014 中工作。我愿意接受想法!

output

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

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

选项 1:

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

...
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)

注意: @Accounts 是一个多值参数 p[从报告中输入。

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

选项 2:

手动将所有字段添加到数据集 - 我'think'这可行,但我还没有尝试过。