8

我在 SSRS 中运行以下查询。如果我为这两个参数添加声明,它在 SQL 管理控制台中运行良好。

declare @EMRQuery varchar(max)
declare @CPSQuery varchar(max)

set @EMRQuery = 'select Person.ExternalId 
                    from ml.Person 
                        join ml.Obs on Person.pId = Obs.pId 
                            join ml.ObsHead on Obs.hdId = ObsHead.hdId 
                    where ObsHead.name = ''SCHOOLREGDTE'' 
                        and Obs.xId = 1.e+035
                        and Obs.change = 2 
                        and Obs.obsDate >= to_date(''' 
                            + convert(varchar(30), @DateYearStart, 120) 
                            + ''', ''YYYY-MM-DD HH24:MI:SS'')
                        and Obs.obsDate < to_date(''' 
                            + convert(varchar(30), @DateQuarterEnd, 120) 
                            + ''', ''YYYY-MM-DD HH24:MI:SS'')'

set @CPSQuery = 'select ic.ListName, count(distinct pp.patientprofileid) as PatCount
                    from PatientProfile pp
                        left join PatientInsurance pi on pp.PatientProfileId = pi.PatientProfileId
                                and pi.OrderForClaims = 1
                                and pi.Inactive <> 1
                            left join InsuranceCarriers ic on pi.InsuranceCarriersId = ic.InsuranceCarriersId
                        join OpenQuery(EMR_LIVE
                            ,  ''' + replace(@EMRQuery, '''', '''''') +
                        ''' ) Students on pp.PatientId = Students.ExternalId
                    group by ic.ListName '

exec(@CPSQuery)

但是,当我将其插入 SSRS 时,它不会记录有任何可用于报告的字段。我如何说服 SSRS 我确实有可以使用的字段?谢谢。

编辑:我刚刚在查询中声明了参数,它识别了字段名称。

declare @DateYearStart datetime
declare @DateQuarterEnd datetime
set @DateYearStart = '2011-07-01'
set @DateQuarterEnd = '2012-03-31'

当然,这是错误的,因为我声明了两次参数,一次是查询参数,一次是在查询中。但是,一旦我注释掉上面的行,我就再次丢失了这些字段。

4

5 回答 5

5

MSDN 论坛上的某个人建议我选择一个临时表,所以我将最后的 exec 语句替换为

declare @CarrierList table (Listname varchar(200), PatCount int);
insert @CarrierList exec(@CPSQuery)
select * from @CarrierList

现在似乎工作正常。

于 2012-05-04T17:45:01.903 回答
3

你如何让 SSRS 相信你有可以使用的领域?答:从数据集属性...字段手动将字段添加到数据集。这将使设计者感到高兴,只要在执行查询时字段存在,报表就可以工作。至少它对我使用带有动态查询文本的 DB2 的 OLE DB 查询有效。

于 2013-07-16T20:37:47.563 回答
1

您的查询可能有问题。SSRS 数据集几乎可以评估您放入其中的任何内容。例如,我刚刚对这两个查询进行了小测试:

declare @a varchar(500)
declare @b varchar(500)
set @a = '(select name from sys.tables) B'
set @b = 'select B.name as name2 from '+@a
exec(@b)

并且我的数据集确实识别了字段 name2。

我建议您查看您的查询。

如果它确实不起作用,您可以尝试将代码添加到 SQL Server 过程,该过程返回具有预定义字段名称的表。

于 2012-05-02T23:18:10.560 回答
1

SET FMTONLY ON;由于 SSRS在您单击刷新按钮时执行存储过程。然后将 aSET FMTONLY OFF;作为存储过程的第一行,它将返回您的字段。

于 2013-03-30T17:31:42.917 回答
0

我怀疑这是因为您的代码中有两个查询,即使只有一个要执行。因此,我建议将这两个查询组合成一个查询。

于 2012-05-03T08:07:21.580 回答