You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP Crystal Reports 2020含连字符数据库名SQL查询语法错误求助

解决Crystal Reports 2020连接含“-”数据库名的SQL语法错误问题

问题背景

将Crystal Reports从2011升级至2020后,访问名称包含“-”的数据库时触发SQL语法错误。核心原因是CR2011会自动为带特殊字符的数据库名、表名添加双引号,而CR2020未执行该操作,导致数据库名中的“-”被解析为SQL运算符:

  • CR2011生成的正确SQL:
    SELECT "something" FROM "my-database-1"."table"
    
  • CR2020生成的错误SQL:
    SELECT something FROM my-database-1.table
    

报错信息:check for the right syntax to use near '-database-1.table'

已确认:ODBC连接测试正常;CR2011使用32位MySQL ODBC 8.0 Unicode驱动,CR2020尝试过64位版本的MySQL ODBC 8.4/8.0/9.0 Unicode驱动;曾尝试SAP知识库1217820中的双引号注册表项,但未生效。

可行解决方案尝试

1. 调整ODBC驱动的SQL模式设置

打开64位ODBC数据源管理器,找到对应MySQL数据源:

  • 进入「配置」页面,切换到「高级」选项卡
  • 在「SQL模式」中添加ANSI_QUOTES,该模式会让MySQL将双引号视为标识符(数据库/表/列名)的引用符号,而非字符串引号
  • 保存配置后重新连接CR2020测试

2. 修改Crystal Reports的数据库连接属性

在CR2020中打开目标报表,进入「数据库专家」:

  • 右键点击当前ODBC连接,选择「属性」
  • 找到「SQL生成」相关设置(部分版本在「高级」子菜单),勾选「用引号括起标识符」或类似选项(不同版本措辞可能有差异)
  • 保存设置后重新生成SQL语句

3. 手动指定带引号的数据库/表名

若上述方法无效,可直接在报表数据源中手动修改表引用:

  • 在「数据库专家」中删除原有表连接
  • 选择「添加命令」,手动编写带双引号的SQL语句:
    SELECT "something" FROM "my-database-1"."table"
    
  • 用该自定义命令作为报表数据源,替代直接拖入表的方式

4. 重新验证注册表项配置

针对64位CR2020,再次确认SAP知识库1217820中的注册表项是否正确设置:

  • 打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Crystal Reports\DatabaseOptions\SQL\MySQL(路径不存在则手动创建)
  • 添加字符串值UseQuotedIdentifiers,设置值为Y
  • 重启CR2020后测试

内容的提问来源于stack exchange,提问作者JFelipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:17:33