SSRS连接Snowflake筛选含逗号列报错的技术求助
问题与解决方案
问题背景
- 表字段
ProcedureCode包含以下值:'183160,WELD'、'87491,WELD'、'874910,WELD'、'87491N,WELD' - 以下Case语句在Snowflake中可正常执行:
When ProcedureCode In('183160,WELD', '87491,WELD', '874910,WELD', '87491N,WELD') Then 'CHL'
- 但通过SSRS连接Snowflake时执行该语句报错,怀疑是值中的逗号引发解析问题
- 改用拆分字符串的写法后,Snowflake中运行正常,但SSRS仍报错,错误信息如下:
ERROR [22023] SQL compilation error:
Can not convert parameter '((SUBSTR(SYS_VW.PROCEDURECODE_7, 1, 6)) IN ('183160', '874910', '87491N'))
AND ((RIGHT(SYS_VW.PROCEDURECODE_7, 4)) = 'WELD')
of type [BOOLEAN] into expected type [VARCHAR (16777216)]
问题分析
报错的核心原因是SSRS在解析SQL时,错误地将布尔类型的条件判断表达式识别为需要传入的字符串类型参数。另外SSRS会自动将Left()转换为SUBSTR(),但这并非报错的直接诱因。
解决建议
1. 直接使用Snowflake原生函数
避免SSRS自动转换函数带来的解析问题,直接用Snowflake的SUBSTR和RIGHT函数编写条件:
WHEN (SUBSTR(cspc.procedureCode, 1, 6) IN ('183160', '874910', '87491N') AND RIGHT(cspc.procedureCode, 4) = 'WELD') THEN 'CHL' WHEN (SUBSTR(cspc.procedureCode, 1, 5) = '87491' AND RIGHT(cspc.procedureCode, 4) = 'WELD') THEN 'CHL'
2. 用正则/模糊匹配替代IN判断
绕开逗号和函数解析问题,使用正则匹配或多个LIKE条件组合:
正则匹配写法
WHEN REGEXP_LIKE(cspc.procedureCode, '^(183160|87491|874910|87491N),WELD$') THEN 'CHL'
LIKE条件组合写法
WHEN cspc.procedureCode LIKE '183160,WELD' OR cspc.procedureCode LIKE '87491,WELD' OR cspc.procedureCode LIKE '874910,WELD' OR cspc.procedureCode LIKE '87491N,WELD' THEN 'CHL'
3. 检查SSRS数据集参数配置
确认SSRS数据集是否误将SQL中的条件表达式当作参数引用,排查是否存在同名参数导致解析混淆的情况。
内容的提问来源于stack exchange,提问作者Talay
相关产品推荐
相关产品推荐

