在条件预期接近','的上下文中指定的非布尔类型的表达式

时间:2017-09-21 20:49:28

标签: sql sql-server reporting-services sql-server-2012 ssrs-2012

当我在SQL Server上运行以下查询时,它可以正常使用单值或多值。但是当我尝试在SSRS数据集上执行相同操作时,它会为多个值抛出错误。

  

错误:   SSRS:在条件为的上下文中指定的非布尔类型的表达式       预计在','附近。关键字“ELSE”附近的语法不正确。

单值正常工作。不确定是什么问题,或者是否有其他方法可以编写此查询。

DECLARE @UserTeam VARCHAR(max) = 'Team1,Team2,Team3,Team4,Team5,Team6,'''

-- Values can inculdes null. if user select blank and Team1,Team2 we need to pull data which is null, Team1, Team2 
IF Object_id('tempdb.dbo.#Team', 'U') IS NOT NULL
  DROP TABLE #team;

SELECT item AS Team
INTO   #team
FROM   dbo.FNSPLIT(@UserTeam, ',')

IF @UserTeam = ''
  BEGIN
      SELECT U.username,
             T.teamcode
      FROM   [User].vwuser u
             LEFT JOIN[User].userteam UT
                    ON U.userid = UT.userid
             LEFT JOIN [User].team AS T
                    ON T.teamid = Ut.teamid
      WHERE  T.teamcode IS NULL
      ORDER  BY U.username
  END
ELSE
  BEGIN
      SELECT U.username,
             T.teamcode
      FROM   [User].vwuser u
             LEFT JOIN [User].userteam UT
                    ON U.userid = UT.userid
             LEFT JOIN [User].team AS T
                    ON T.teamid = Ut.teamid
             JOIN #team tm
               ON T.teamcode = tm.team
      WHERE  ( U.username NOT LIKE '%System%' )
      ORDER  BY U.username
  END  

2 个答案:

答案 0 :(得分:0)

你可以执行下一句,来测试函数fnSplit:

DECLARE @UserTeam VARCHAR(MAX)=' Team1,Team2,Team3,Team4,Team5,Team6,'''

选择项目AS Team FROM dbo.fnSplit(@UserTeam,',')

如果上述功能正常工作,您将看到七行:

  • TEAM1
  • 的Team2
  • Team3
  • Team4
  • Team5
  • Team6
  • '(单引号)

答案 1 :(得分:0)

我可以弄清楚问题是什么。这是因为UserTeam参数不接受多个选择。要解决我添加下面的表达式。

=JOIN(Parameters!UserTeam.Value,",")

数据集属性 - >参数 - > @UserTeam - >添加表达。基本上它会用逗号分隔值和函数split分隔dbo.fnSplit(@UserTeam,',')将转换成表格。

此外,我在没有IF条件的情况下以更好的方式更改了查询

SELECT U.userName, T.teamCode 
FROM [User].vwUser u
   left join [User].UserTeam UT  ON U.userId = UT.userId 
   left join [User].Team AS T ON T.teamId = Ut.teamId 
WHERE        
   U.userName NOT LIKE '%System%'
   AND ISNULL(T.teamCode,'')  IN (SELECT ISNULL(item,'') FROM dbo.fnSplit(@UserTeam,','))
ORDER BY U.userName