Tsql 在预期条件的上下文中指定的非布尔型表达式,靠近'';在ssrs 2008 r2中

Tsql 在预期条件的上下文中指定的非布尔型表达式,靠近'';在ssrs 2008 r2中,tsql,reporting-services,ssrs-2008-r2,Tsql,Reporting Services,Ssrs 2008 R2,我收到错误消息,“在预期条件的上下文中指定的非布尔类型的表达式,靠近','” 运行ssrs 2008 r2报告时。 数据集中嵌入的sql为: IF @reportID <> 0 BEGIN SELECT 'Students report 1' AS selectRptName, 1 AS rptNumValue UNION SELECT 'Students report 2', 2 UNION SELECT 'Students repor

我收到错误消息,“在预期条件的上下文中指定的非布尔类型的表达式,靠近','” 运行ssrs 2008 r2报告时。 数据集中嵌入的sql为:

IF @reportID <> 0
BEGIN
    SELECT 'Students report 1' AS selectRptName, 1 AS rptNumValue 
    UNION
    SELECT 'Students report 2', 2  
    UNION
    SELECT 'Students report 3', 3 
    UNION
    SELECT 'Students report 4', 4 
    UNION
    SELECT 'Students report 5', 5 
    ORDER BY selectRptName
END
IF@reportID 0
开始
选择“学生报告1”作为selectRptName,选择1作为rptNumValue
联合
选择“学生报告2”,2
联合
选择“学生报告3”,3
联合
选择“学生报告4”,4
联合
选择“学生报告5”,5
按名称排序
结束
当我声明
@reportID
时,sql在ManagementStudio中运行良好

sql运行良好,我注释掉了
“IF@reportID 0”

@reportID
是传递给适用数据集的参数值。
@reportID
可以有多个值


因此,您可以向我展示sql和/或告诉我需要做什么来为我解决问题吗?

为了检查多值参数的值,您需要使用
In
操作符

IF 0 NOT IN (@reportID)
但在我看来,您似乎在试图检查有多少个值被分配给了多值参数,而实际上您不能直接在SQL查询中这样做

在数据集属性中,转到参数部分并添加一个新参数,该参数的值由表达式设置。然后使用此表达式将该参数设置为多值参数中的项数:

=Parameters!reportID.Count
然后,可以在SQL中使用该参数来检查分配给多值参数的值的数量


有关SSRS中参数集合的更多信息,请参阅此MSDN页面:

您所说的
@reportID
可以有多个值是什么意思?你是说它是一个多值参数吗?此外,您不能在SSRS查询生成器中使用
IF..ELSE
语句。@reportID可以有0、1或200个值。我正在考虑调用一个分离参数值的函数。如何设置sql?@M.Ali sql有一个
IF
条件,并且在SSRS数据集中运行良好。将代码更改为:如果0不在(@reportID)