使用RODBC::sqlQuery调用SQL Server含空格字段失败的问题求助
解决RODBC查询SQL Server带空格字段的问题
嘿,我太懂这种踩坑的感觉了!SQL Server里带空格的字段在RODBC里确实容易出问题,你之前试的单引号、paste拼接没生效,大概率是因为没用到SQL Server识别字段标识符的正确方式——方括号[],咱们来一步步搞定:
核心规则:用方括号包裹带空格的字段名
SQL Server里,单引号是用来包裹字符串值的,双引号默认情况下也会被当成字符串(除非你手动开启特定配置),只有方括号[]才是专门用来标识带空格/特殊字符的字段、表名的。比如你的字段叫VR Value,就得写成[VR Value],而不是'VR Value'或者"VR Value"。修正你的查询语句示例
看你给的代码,假设你要查询的带空格字段是VR Value(而非VR_Value),那修正后的查询应该是这样:p5 <- sqlQuery(con, 'SELECT a.region, a.Country, a.Qtr_ID, [Net VAT] AS Variable_Type, "Printing" AS [External_Segment], SUM(a.[VR Value]) AS Value FROM (SELECT d....')这里注意:
- 把带空格的字段(比如
Net VAT、VR Value)用[]包起来 - 像
"Printing"这种字符串值用双引号是没问题的,因为它不是字段标识符
- 把带空格的字段(比如
用paste拼接查询字符串的正确姿势
如果是动态生成查询(比如字段名存在变量里),拼接的时候要确保方括号被包含进去。比如:# 假设带空格的字段名存在变量里 target_col <- "VR Value" # 拼接查询语句 query <- paste0('SELECT a.region, SUM(a.[', target_col, ']) AS Value FROM your_table') # 执行查询 p5 <- sqlQuery(con, query)这样拼接出来的语句里,带空格的字段会被正确用方括号包裹,RODBC就能识别了。
可选:开启QUOTED_IDENTIFIER(不推荐)
如果你非要用双引号来标识字段,可以在查询开头加上SET QUOTED_IDENTIFIER ON;,告诉SQL Server把双引号当成标识符。比如:p5 <- sqlQuery(con, 'SET QUOTED_IDENTIFIER ON; SELECT a.region, a."Net VAT" AS Variable_Type FROM ...')但这种方式兼容性不如方括号,因为不同数据库的标识符规则不一样,方括号是SQL Server的标准写法,更稳妥。
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

