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
相关产品推荐
相关产品推荐

