R语言RODBC、DBI包查询SQL Server时LIMIT命令报错
问题原因
该报错和使用RODBC还是DBI包无关,本质是SQL方言不兼容:LIMIT是MySQL、PostgreSQL、SQLite等数据库使用的结果集行数限制语法,Microsoft SQL Server原生不支持该关键字,因此SQL语句提交到服务端后会直接抛出语法错误。
解决方法
根据你使用的SQL Server版本,替换为对应支持的行数限制语法即可:
- SQL Server 2012及以上版本:使用
OFFSET ... FETCH NEXT语法,注意该语法必须搭配ORDER BY子句使用,可指定任意业务需要的排序字段,示例代码:
data <- sqlQuery(dcs, ' SELECT Classification_Code, Country_Code FROM ICP_Submissions.dbo.ICP_Fact WHERE Classification_Code IN (\'EXP\') AND Indicator_Code IN (\'1000000\',\'1100000\') ORDER BY Country_Code OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY ')
- SQL Server 2008及更早版本:使用
TOP关键字,直接写在SELECT后、查询字段前,无强制排序要求,示例代码:
data <- sqlQuery(dcs, ' SELECT TOP 100 Classification_Code, Country_Code FROM ICP_Submissions.dbo.ICP_Fact WHERE Classification_Code IN (\'EXP\') AND Indicator_Code IN (\'1000000\',\'1100000\') ')
使用DBI包的dbGetQuery函数查询时,替换为上述对应SQL语句即可正常运行。
内容的提问来源于stack exchange,提问作者giotonu
相关产品推荐
相关产品推荐

