我在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'
当然,这是错误的,因为我将参数声明两次,一次作为查询参数,一次在查询中。但是,一旦我评论出上面的线条,我就再次丢失了这些字段。
答案 0 :(得分:4)
有人在MSDN论坛上建议我选择一个临时表,所以我用
替换了最后的exec语句declare @CarrierList table (Listname varchar(200), PatCount int);
insert @CarrierList exec(@CPSQuery)
select * from @CarrierList
现在似乎工作正常。
答案 1 :(得分:3)
您如何说服SSRS您有合作领域?答案:从数据集属性...字段手动将字段添加到数据集。这将使设计人员感到高兴,只要执行查询时字段存在,报表就可以工作。至少它使用OLE DB查询到DB2使用动态查询文本。
答案 2 :(得分: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)
我的数据集确实识别了字段名称。
我建议您检查一下您的查询。
如果它确实不起作用,您可以尝试将代码添加到SQL Server过程,该过程返回具有预定义字段名称的表。
答案 3 :(得分:1)
由于SSRS在单击刷新按钮时使用SET FMTONLY ON;
执行存储过程。然后在您的存储过程中放置SET FMTONLY OFF;
作为第一行,它将返回您的字段。
答案 4 :(得分:0)
我怀疑这是因为你的代码中有两个查询,即使只有一个要执行。因此,我建议将两个查询合并为一个查询。