背景介绍
需求背景:第三方提供视图,查询该视图信息,列名采取中文形式
例如:视图名V_Test
姓名 |
性别 |
工作年限(年) |
张三 |
男 |
4 |
李四 |
女 |
1 |
复现步骤
- Navicat配置Sql Server
- 因为未接触过中文列名,所以简单查了下,可行。
SELECT 姓名 FROM V_Test
- 于是按照此模式开发,但是报错了
SELECT 姓名, 性别, 工作年限(年) FROM V_Test
报错信息:
Msg 195, Level 15, State 10, Server WIN-0ERUULFAUIU, Procedure , Line 0
‘工作年限’ is not a recognized built-in function name.
- 发现和测试多数据库适配——遇到的函数不识别(工作年限因为后面的括号,导致识别成了函数)
- 改成字符串试试?
SELECT '姓名', '性别', '工作年限(年)' FROM V_Test
姓名 |
性别 |
工作年限(年) |
姓名 |
性别 |
工作年限(年) |
姓名 |
性别 |
工作年限(年) |
- 也不对,成查询常量了
解决办法:单引号改成双引号
SELECT "姓名", "性别", "工作年限(年)" FROM V_Test
扩展尝试
既然是括号导致的识别成函数,那中文括号是否就没事儿呢?【当然还是建议用双引号的方式!】
- 列名换成中文括号
- 其他同上,执行
SELECT 工作年限(年) FROM V_Test
- 非法括号报错:
Msg 102, Level 15, State 1, Server WIN-0ERUULFAUIU, Procedure , Line 0
Incorrect syntax near ‘(’.