允许多个值在SSRS中不起作用

时间:2018-02-09 21:54:25

标签: sql reporting-services

我有一个报告,当在SQL中运行时,使用多值参数可以毫无问题地提取数据。当应用于存储过程并通过SSRS处理并在选择多个值时启用“允许多值”时,报表不返回任何数据。与其他用户一样,如果我选择单个值,报表将返回数据。

我做了一些功课并尝试增加我的参数值,但这也无济于事。

请参阅下面的查询。有问题的参数是@material参数。

With Zone as 
(Select 
 name,
 id 
 From datex_Footprint.LocationContainersView
 Where 
 typename IN ('Zone', 'Area') 
)
SELECT inv.projectId,
       inv.projectName,
       inv.materialLookupCode,
       inv.materialDescription,
       CASE
           WHEN sn.id IS NULL
           THEN inv.totalPackagedAmount
           ELSE 1
       END AS totalPackagedAmount,
       inv.licensePlateLookupCode,
      z.name WarehouseZone,
       inv.locationName,
       sn.id serialNumberId,
       sn.lookupCode,
       udf.SerialRef1,
       udf.SerialRef2,
       udf.SerialRef3,
       udf.SerialRef4,
       udf.SerialRef5
FROM datex_footprint.InventoryDetailedViewByLicensePlateLot inv
     LEFT OUTER JOIN datex_footprint.SerialNumbers sn ON sn.lotId = inv.lotId
                                                         AND sn.licensePlateId = inv.licensePlateId
                                                         AND sn.archived = 'False'
     LEFT OUTER JOIN datex_footprint.SerialNumbersUdfs udf ON udf.id = sn.id
    INNER JOIN datex_footprint.LocationContainersView lcv ON lcv.id = inv.locationId
     INNER JOIN datex_footprint.locationcontainers LC ON LC.id = lcv.id
 INNER JOIN Zone z ON z.id = LC.parentid
WHERE inv.projectName IN(@projectName)
     AND inv.materialLookupCode IN(@material)
AND (inv.locationName IN(@locationName)
OR (@locationName IS NULL));

1 个答案:

答案 0 :(得分:0)

如果您不必使用存储过程,那么解决此问题的最简单方法是将此代码直接放入数据集中。它将按预期工作,SSRS会将多值参数转换为逗号分隔列表并将其注入SQL语句。

如果必须使用存储过程,则需要自己进行所有转换,包括在存储过程中拆分值。有很多关于如何执行此操作的示例,例如http://www.codeulike.com/2012/03/ssrs-multi-value-parameters-with-less.html

就个人而言,我总是将数据集代码直接放在数据集查询中,它更方便,意味着SQL服务器上的对象更少但安全性更低。