Reporting services 在表中插入多个值参数
我有一个客户希望将一个值列表放入Reporting Services中的一个参数中,将其与数据库中的一个表进行比较,并在下一个字段中返回完整的值列表,该字段指示是否在数据库表中找到该值。例如,如果她的列表是Duck、Horse、Chicken,并且表中只存在Duck,则她希望结果如下所示:Reporting services 在表中插入多个值参数,reporting-services,reportparameter,Reporting Services,Reportparameter,我有一个客户希望将一个值列表放入Reporting Services中的一个参数中,将其与数据库中的一个表进行比较,并在下一个字段中返回完整的值列表,该字段指示是否在数据库表中找到该值。例如,如果她的列表是Duck、Horse、Chicken,并且表中只存在Duck,则她希望结果如下所示: Duck Yes Horse No Chicken No DECLARE @FarmAnimals AS TABLE (Animal varchar(50)) INSERT INTO @Fa
Duck Yes
Horse No
Chicken No
DECLARE @FarmAnimals AS TABLE (Animal varchar(50))
INSERT INTO @FarmAnimals VALUES (@ReportParameter1)
SELECT Animal
,'In Barnyard’ = CASE WHEN EXISTS
(SELECT *
FROM tblBarnyard
WHERE BarnyardAnimal = Animal)
THEN 'Yes'
ELSE 'No'
END
FROM @FarmAnimals
她不想只返回那些匹配的值,所以一个简单的WHERE Animal IN(@ReportParameter1)
不会这样做
我可以为这样的单个值参数进行此操作:
Duck Yes
Horse No
Chicken No
DECLARE @FarmAnimals AS TABLE (Animal varchar(50))
INSERT INTO @FarmAnimals VALUES (@ReportParameter1)
SELECT Animal
,'In Barnyard’ = CASE WHEN EXISTS
(SELECT *
FROM tblBarnyard
WHERE BarnyardAnimal = Animal)
THEN 'Yes'
ELSE 'No'
END
FROM @FarmAnimals
但是,是否可以循环使用长度未指定的多值参数,并为每个值创建INSERT INTO语句?如果这是不可能的,我很高兴告诉她这是不可能的,但我想不出有一次我发现在SQL中有些东西是不可能的。在SQL中没有必要这样做,您只需编写一个自定义代码函数来迭代选定的参数值,就可以得到您想要的结果 在
Report
菜单上,访问Report Properties…
并选择code
选项卡。插入以下代码:
Function IsFieldSelected (fieldValue as String, ByVal parameter As Parameter) As String
Dim Result As String
Result = "No"
If parameter.IsMultiValue Then
For i As integer = 0 To parameter.Count-1
If (fieldValue = parameter.Value(i)) Then
Result = "Yes"
End If
Next
Else
If (fieldValue = parameter.Value) Then
Result = "Yes"
End If
End If
Return Result
End Function
然后在希望“是/否”访问结果的单元格中使用此表达式:
=Code.IsFieldSelected(Fields!MyField.Value, Parameters!MyParameter)
请注意,这里传递的是参数对象,而不是Value属性(因此不要将.Value
放在末尾)。我们在自定义代码函数中访问参数对象的Value属性,并将其与传递的字段值进行比较
这将适用于单值和多值参数 您可以使用SQL Server中的STRING_SPLIT函数执行此操作
--Placeholder table
DECLARE @ExistingValuesInTable TABLE (Val VARCHAR(255)) ;
INSERT INTO @ExistingValuesInTable (Val) VALUES ('Duck') ;
--
DECLARE @UserInput VARCHAR(255) = 'Duck, Horse, Chicken' ;
SELECT ss.value,
CASE WHEN evit.Val IS NULL THEN 'No' ELSE 'Yes' END AS AlreadyExists
FROM STRING_SPLIT(@UserInput, ',') AS ss
LEFT OUTER JOIN @ExistingValuesInTable AS evit ON ss.value = evit.Val ;
谢谢我试试看,