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'这可行,但我还没有尝试过。
使用 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'这可行,但我还没有尝试过。