【问题标题】:An expression of non boolean type specified in a context where a condition is expected near ','在“,”附近预期条件的上下文中指定的非布尔类型的表达式
【发布时间】:2018-03-03 08:05:30
【问题描述】:

当我在 SQL Server 上运行以下查询时,它适用于单个值或多个值。但是当我尝试在 SSRS Dataset 上执行相同的操作时,它会为多个值引发错误。

错误: 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  

【问题讨论】:

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


    【解决方案1】:

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

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

    SELECT item AS Team FROM dbo.fnSplit(@UserTeam,',')

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

    • 团队 1
    • 团队 2
    • 团队 3
    • 第 4 组
    • 团队 5
    • 团队 6
    • '(单引号)

    【讨论】:

    • 是的,我给''表示为空来解释。因为我不确定如果我在 SSRS 参数中选择空白字段,它传递的值是什么
    【解决方案2】:

    我可以弄清楚是什么问题。这是因为 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 
    

    【讨论】:

      猜你喜欢
      • 2021-02-26
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      相关资源
      最近更新 更多