在预期条件接近“,”的上下文中指定的非布尔类型的表达式
An expression of non boolean type specified in a context where a condition is expected near ','
当我 运行 在 SQL 服务器上执行以下查询时,它可以很好地处理单个值或多个值。但是当我尝试在 SSRS 数据集上执行相同的操作时,它会为多个值抛出错误。
ERROR:
SSRS: An expression of non boolean type specified in a context where a condition is
expected near ','. Incorrect syntax near the keyword '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
可以执行下一句,测试函数fnSplit:
声明 @UserTeam VARCHAR(MAX) = 'Team1,Team2,Team3,Team4,Team5,Team6,'''
SELECT item AS Team FROM dbo.fnSplit(@UserTeam,',')
如果上述功能正常运行,您将看到七行:
- 团队 1
- 团队 2
- Team3
- Team4
- Team5
- Team6
- '(单引号)
我可以弄清楚是什么问题了。这是因为 UserTeam 参数不接受多项选择。为了解决我添加了下面的表达式。
=JOIN(Parameters!UserTeam.Value,",")
数据集属性 -> 参数 -> @UserTeam -> 添加表达式。基本上它将以逗号分隔值分隔,函数 split dbo.fnSplit(@UserTeam, ',') 将转换为 table.
此外,我还以更好的方式更改了没有 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
当我 运行 在 SQL 服务器上执行以下查询时,它可以很好地处理单个值或多个值。但是当我尝试在 SSRS 数据集上执行相同的操作时,它会为多个值抛出错误。
ERROR: SSRS: An expression of non boolean type specified in a context where a condition is expected near ','. Incorrect syntax near the keyword '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
可以执行下一句,测试函数fnSplit:
声明 @UserTeam VARCHAR(MAX) = 'Team1,Team2,Team3,Team4,Team5,Team6,'''
SELECT item AS Team FROM dbo.fnSplit(@UserTeam,',')
如果上述功能正常运行,您将看到七行:
- 团队 1
- 团队 2
- Team3
- Team4
- Team5
- Team6
- '(单引号)
我可以弄清楚是什么问题了。这是因为 UserTeam 参数不接受多项选择。为了解决我添加了下面的表达式。
=JOIN(Parameters!UserTeam.Value,",")
数据集属性 -> 参数 -> @UserTeam -> 添加表达式。基本上它将以逗号分隔值分隔,函数 split dbo.fnSplit(@UserTeam, ',') 将转换为 table.
此外,我还以更好的方式更改了没有 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