Crystal Reports使用参数化SQL查询打开报表报语法错误如何解决
解决方案
- 步骤1:匹配报表参数类型
先在Crystal Reports的参数字段管理器中,确认{?DataInicio}、{?DataFim}两个参数的类型设置为「日期/时间」,不要设置为字符串类型。如果你坚持用字符串类型参数,需要把SQL条件里的参数用单引号包裹,改成'{?DataInicio}'和'{?DataFim}'。 - 步骤2:命令数据源绑定内置参数
如果你是用「命令(Command)」作为报表数据源,必须先在命令编辑窗口的左侧参数区域,手动新建两个和SQL中同名、同类型的参数,再将参数插入到SQL语句的对应位置,不要直接手动输入{?xxx}格式的参数,避免CR无法识别。 - 步骤3:适配CR兼容的SQL语法
部分旧版本Crystal Reports的SQL解析器不支持CONCAT函数,可以将拼接逻辑替换为+号拼接,修改后的CASE段如下:CASE WHEN Ausencias.Duracaoini = '1900-01-01 00:00:00.000' and Ausencias.DuracaoFim = '1900-01-01 00:00:00.000' Then '08:00' ELSE CONVERT(VARCHAR(6),DATEDIFF(second,Ausencias.Duracaoini, ausencias.Duracaofim)/3600) + ':' + CONVERT(VARCHAR(2),(DATEDIFF(second,Ausencias.Duracaoini, ausencias.Duracaofim)%3600) /60) END AS Duração - 步骤4:显式转换日期格式避免兼容性问题
如果是日期格式不匹配导致的语法错误,可以将条件改写为显式日期转换,适配多数数据库的格式要求:where ausencias.Data between CONVERT(DATETIME, {?DataInicio}, 121) and CONVERT(DATETIME, {?DataFim}, 121)
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

