我在SSRS中有一个参数@Destinataire,其中包含值列表和一个空字符串

sql - SSRS-空值-LMLPHP

我创建了一个查询,并将其设置为可用值,这给了我下拉列表

SELECT code_name FROM tableA UNION ALL SELECT ''

使用空字符串运行报告时,没有任何结果

sql - SSRS-空值-LMLPHP

我试图将参数设置为文本框,但它也无济于事

但是,当运行我用于运行此报告的sql查询时,一切都很好,因为我已检索到所有行(请参见下面的查询)
DECLARE @DateCmt DATE = '05/09/2015',
        @DateFin DATE = '05/09/2016',
        @Restriction INT = 1,
        @Destinataire VARCHAR(5) = ''
        --
        ;

--SELECT @DateCmt,@DateFin

 SELECT DISTINCT
CFE_EDI.IU_LIASSE
,CFE_EDI.ETAT
,CFE_EDI.DATHRMAJ -- nouveau
,CFE_EDI.ESP_APPLI
,CFE_EDI.NOM_RS
,PARTENAIRES.LIBEL
,PARTENAIRES.CODE_INSEE
,CFE_EDI.DATHR_ENV -- nouveau
,CFE_EDI.DATHR_MEF -- nouveau
,CFE_EDI.DATHR_PRE -- nouveau
,CFE_EDI.DATHR_OUV -- nouveau
--,CFE_EDI.DATEHR_DEPOT-- mettre l'heure
,CFE_EDI.GESTDEL
--,CFE_SERVICE_DEST.IU_DEST
--,CFE_SERVICE.IU_LIASSE
,CASE WHEN CFE_EDI.ETAT = 'MEF' THEN 'En Attente le'
     WHEN CFE_EDI.ETAT = 'PRE' THEN 'Préparé le'
     WHEN CFE_EDI.ETAT = 'ENV' THEN 'Envoyé le'
     WHEN CFE_EDI.ETAT = 'OUV' THEN 'Réceptionné le'
     WHEN CFE_EDI.ETAT = 'NRM' THEN 'Non remis le'
     WHEN CFE_EDI.ETAT = 'NAQ' THEN 'Non acquitté le'
     END AS ChampEtat
,CASE WHEN CFE_EDI.ETAT = 'OUV' THEN 'Date d''envoi : ' + CONVERT(VARCHAR,CFE_EDI.DATHR_ENV,103)
END AS Date_Envoi,
CASE
WHEN CFE_EDI.ETAT='MEF' THEN  CONVERT(VARCHAR,CFE_EDI.DATHR_MEF,103)
WHEN CFE_EDI.ETAT='PRE' THEN  CONVERT(VARCHAR,CFE_EDI.DATHR_PRE,103)
WHEN CFE_EDI.ETAT='ENV' THEN  CONVERT(VARCHAR,CFE_EDI.DATHR_ENV,103)
WHEN CFE_EDI.ETAT='OUV' THEN  CONVERT(VARCHAR,CFE_EDI.DATHR_OUV,103)
ELSE CONVERT(VARCHAR,CFE_EDI.DATHR_DEPOT,103) END AS DateMaj ,
CASE
WHEN CFE_EDI.ETAT='MEF' then CONVERT(VARCHAR,CFE_EDI.DATHR_MEF,108)
WHEN CFE_EDI.ETAT='PRE' then CONVERT(VARCHAR,CFE_EDI.DATHR_PRE,108)
WHEN CFE_EDI.ETAT='ENV' then CONVERT(VARCHAR,CFE_EDI.DATHR_ENV,108)
WHEN CFE_EDI.ETAT='OUV' then CONVERT(VARCHAR,CFE_EDI.DATHR_OUV,108)
ELSE CONVERT(VARCHAR,CFE_EDI.DATHR_DEPOT,108) END AS HeureMaj,
PARTENAIRES.LIBEL + '(' + CFE_EDI.CODE_INSEE + ')' AS LibelDestinataire
--,CASE WHEN @Restriction = 1 THEN '1'
--     WHEN @Restriction = 0 THEN '0' END AS Restriction
,CASE WHEN @DateCmt != @DateFin AND @DateCmt <  @DateFin THEN 'Diffusion Xml du ' + CONVERT(VARCHAR,(@DateCmt),103) + ' au ' + CONVERT(VARCHAR,(@DateFin),103) ELSE
'Diffusion EDI Xml du ' + CONVERT(VARCHAR,@DateCmt,103) END AS Plage_Diffusion
-- INTO
 FROM
 (PARTENAIRES
 INNER JOIN dbo.CFE_EDI ON PARTENAIRES.CODE_INSEE = CFE_EDI.CODE_INSEE)
INNER JOIN dbo.CFE_SERVICE ON CFE_EDI.IU_LIASSE = CFE_SERVICE.IU_LIASSE
INNER JOIN dbo.CFE_SERVICE_DEST ON (PARTENAIRES.IU_PART = CFE_SERVICE_DEST.IU_PART_CFE)
WHERE
case when @Restriction = 1
              then case when CFE_EDI.ETAT in('ENV','OUV') then 1 else 0 end
           when @Restriction = 0
              then case when CFE_EDI.ETAT not in('ENV','OUV') then 1 else 0 end
           else case when CFE_EDI.ETAT <> '' then 1 else 0 end
       end = 1
AND
CFE_EDI.CODE_INSEE IS NOT NULL AND CFE_EDI.CODE_INSEE != ''
    AND    CASE --WHEN CFE_EDI.CODE_INSEE IS NOT NULL AND CFE_EDI.CODE_INSEE !=''
           --THEN CASE
           WHEN @Destinataire != '' AND (@Destinataire) IS NOT NULL
              THEN CASE WHEN CFE_EDI.CODE_INSEE = @Destinataire THEN 1 ELSE 0 END
           ELSE CASE WHEN CFE_EDI.CODE_INSEE = PARTENAIRES.CODE_INSEE
                    AND cfe_edi.dathrmaj > @DateCmt AND cfe_edi.dathrmaj < @DateFin
                    AND CFE_EDI.GESTDEL = '1' THEN 1 ELSE 0 END
           END = 1

第一个问题是要知道是否可以使用我的愚蠢技巧来设置参数。

第二个问题是为什么带有空字符串的参数查询可以解决问题,并且一旦您使用SSRS,就什么也没有。

在此先感谢您的帮助

更新我尝试将WHEN LEN(@Destinataire) > 0设置为@Destinataire = '',但是没有成功。

更新2 我现在的目标是要有一个解决方案,以在@Destinataire等于''或NULL的情况下检索所有数据。但是,考虑一下,此解决方案等效于将所有值填充在@Destinataire中。所以,我会说一种或另一种方式。

最终更新我已经重新创建了所有内容,哦!魔术,分组或“一切”选项按预期工作。我仍然不知道出了什么问题,但结果很好。非常感谢您的帮助和支持。

最佳答案

查看您的查询以及将@Destinataire传递到的位置,您应该能够根据where子句传递一个空值,并获得与传递``''相同的效果

 CASE --WHEN CFE_EDI.CODE_INSEE IS NOT NULL AND CFE_EDI.CODE_INSEE !=''
       --THEN CASE
       WHEN @Destinataire != '' AND (@Destinataire) IS NOT NULL
          THEN CASE WHEN CFE_EDI.CODE_INSEE = @Destinataire THEN 1 ELSE 0 END
       ELSE CASE WHEN CFE_EDI.CODE_INSEE = PARTENAIRES.CODE_INSEE
                AND cfe_edi.dathrmaj > @DateCmt AND cfe_edi.dathrmaj < @DateFin
                AND CFE_EDI.GESTDEL = '1' THEN 1 ELSE 0 END
       END = 1

我将尝试仅设置该特定参数,以允许ssrs报告中的空值,该空值可以在参数设置窗口中的复选框中找到。

关于sql - SSRS-空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39413482/

10-11 09:28