如何在SSRS数据集中列出动态SQL查询中的字段

Sar*_*can 7 t-sql sql-server reporting-services ssrs-2008

我在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)
Run Code Online (Sandbox Code Playgroud)

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

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

declare @DateYearStart datetime
declare @DateQuarterEnd datetime
set @DateYearStart = '2011-07-01'
set @DateQuarterEnd = '2012-03-31'
Run Code Online (Sandbox Code Playgroud)

当然,这是错误的,因为我将参数声明两次,一次作为查询参数,一次在查询中.但是,一旦我评论出上面的线条,我就再次丢失了这些字段.

Sar*_*can 5

MSDN 论坛上的某人建议我选择临时表,因此我将最终的 exec 语句替换为

declare @CarrierList table (Listname varchar(200), PatCount int);
insert @CarrierList exec(@CPSQuery)
select * from @CarrierList
Run Code Online (Sandbox Code Playgroud)

现在似乎运行良好。