You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行SSRS查询返回空白结果的技术问询

排查SSRS报表空白无数据的问题

我来帮你梳理下这个SSRS报表返回空白的可能原因,从查询语法、关联逻辑到参数配置逐一分析:

1. 首先修正查询中的语法错误

你的查询语句里存在多余的逗号,这会直接导致SQL执行失败,自然无法返回任何数据:

  • ContactName, ,tblDataPermit.XmlDataField.value(...) AS ConPhone 此处多了一个逗号
  • Grp, ,tblDataPermit.XmlDataField.value(...) AS A 此处也多了一个逗号

修正后的完整查询:

SELECT 
    tblDataPermit.ApplicationNumber ,
    tblDataParcel.StreetNum ,
    tblDataParcel.StreetName ,
    tblDataPermit.Applicant ,
    tblDataPermit.Status ,
    tblDataPermit.XmlDataField.value('(//*[local-name()="Text4Size10"])[1]', 'nvarchar(max)') AS Cycle ,
    tblDataPermit.ApplicantPhone AS BusPhone ,
    tblDataPermit.XmlDataField.value('(//*[local-name()="Text2Size50"])[1]', 'nvarchar(max)') AS ContactName,
    tblDataPermit.XmlDataField.value('(//*[local-name()="Text1Size10"])[1]', 'nvarchar(max)') AS ConPhone ,
    tblDataPermit.ApplicationType AS Grp,
    tblDataPermit.XmlDataField.value('(//*[local-name()="ExtraYesNo1"])[1]', 'nvarchar(max)') AS A ,
    tblDataPermit.XmlDataField.value('(//*[local-name()="ExtraYesNo2"])[1]', 'nvarchar(max)') AS E ,
    tblDataPermit.XmlDataField.value('(//*[local-name()="ExtraYesNo3"])[1]', 'nvarchar(max)') AS F ,
    tblDataPermit.XmlDataField.value('(//*[local-name()="YesNo3"])[1]', 'nvarchar(max)') AS S ,
    ExpirationDates.ExpirationDate AS Due ,
    IStatuss.Status AS ADate ,
    MaxCompletionDates.MaxCompletionDate ,
    SysCod.CodRcdTyp ,
    SysCod.CodLabel ,
    SysCod.CodOrder 
FROM SysCod 
INNER JOIN tblDataPermit ON SysCod.CodOrder = tblDataPermit.Type 
INNER JOIN tblDataParcel ON tblDataPermit.ParcelID = tblDataParcel.ParcelID 
LEFT OUTER JOIN (
    SELECT ProjectNumber, ExpirationDate FROM tblDataPermit AS tblDataPermit_2 WHERE (Type = '54')
) AS ExpirationDates ON tblDataPermit.ApplicationNumber = ExpirationDates.ProjectNumber 
INNER JOIN (
    SELECT ProjectNumber, Status FROM tblDataPermit AS tblDataPermit_3 WHERE (Type = '54')
) AS IStatuss ON tblDataPermit.ProjectNumber = IStatuss.ProjectNumber 
LEFT OUTER JOIN (
    SELECT MAX(tblDataActions.CompletionDate) AS MaxCompletionDate, tblDataPermit_1.Type, tblDataPermit_1.ProjectNumber 
    FROM tblDataActions 
    INNER JOIN tblDataPermit AS tblDataPermit_1 ON tblDataActions.ApplicationNumber = tblDataPermit_1.ApplicationNumber 
    GROUP BY tblDataPermit_1.Type, tblDataPermit_1.ProjectNumber 
    HAVING (tblDataPermit_1.Type = '54')
) AS MaxCompletionDates ON tblDataPermit.ApplicationNumber = MaxCompletionDates.ProjectNumber 
WHERE (tblDataPermit.Type = '72') 
AND CodLabel IN (@AppStatus) 
AND XmlDataField.value('(//*[local-name()="Text4Size10"])[1]', 'nvarchar(max)') IN (@Cycle)

2. 关联逻辑可能过滤掉所有数据

  • INNER JOIN SysCod:如果SysCod表中没有与tblDataPermit.Type='72'匹配的CodOrder记录,INNER JOIN会直接过滤掉所有主表数据。可以改为LEFT JOIN SysCod保留主表数据,或者先确认SysCod中存在Type=72对应的记录。
  • INNER JOIN IStatuss:这个子查询筛选的是Type='54'的记录,而主查询目标是tblDataPermit.Type='72',如果Type=72的记录没有对应的Type=54的ProjectNumber,INNER JOIN会过滤掉这些行。建议改成LEFT JOIN IStatuss,除非你确认所有Type=72的记录都有匹配的Type=54数据。

3. XML字段取值与参数匹配问题

  • 先单独验证XML字段的取值是否正确:在SSMS中执行以下语句,确认是否返回预期的Cycle值:
    SELECT XmlDataField.value('(//*[local-name()="Text4Size10"])[1]', 'nvarchar(max)') AS Cycle
    FROM tblDataPermit
    WHERE Type='72'
    
  • 检查@Cycle参数配置:确保参数包含上述查询返回的Cycle值,且参数类型与XML返回的nvarchar类型匹配;如果是多值参数,确认SSRS参数设置中“允许多值”已勾选。

4. SSRS参数与配置验证

  • 先在SSMS中直接执行查询(替换@AppStatus和@Cycle为具体值,比如CodLabel IN ('Approved')、Cycle IN ('2024')):
    • 如果SSMS能查到预期的200行数据,说明问题在SSRS端,比如参数默认值为空、参数未正确映射到数据集;
    • 如果SSMS也查不到数据,那就是查询逻辑的问题,回到前面的关联和条件排查。

内容的提问来源于stack exchange,提问作者Bill R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:57:50