我有一个西班牙语的SQL Server数据库,我想从SELECT * table.name
获取结果为此,我使用odbc库将R连接到数据库。
之后,我这样做:
dbSendQuery(con,"SELECT * FROM [database].[dbo].[table.name]")
这会给我一个错误:std :: bad_alloc
但如果我这样做:
dbSendQuery(con,"SELECT Id FROM [database].[dbo].[table.name]")
然后我获得了好成绩
我已经看到,只有当查询中涉及varchar类型的列名时,才会显示错误,所以我认为架构可能是这个问题的原因。
如果没有此错误,我该怎么办?架构是" dbo"
谢谢!
答案 0 :(得分:1)
不知道您的客户端环境是什么,ODBC + R + Linux + Sybase 也遇到了类似的问题。我能够查询数字列而不查询字符列,从而收到相同的std::bad_alloc
错误。您的Id
字段可能是数字,而SELECT *
则在其他列中提取字符数据类型。
对我来说,解决方案是确保我使用的是支持8字节SQLLEN数据类型的ODBC驱动程序。在Linux上,运行命令odbcinst -j
向我显示,对于在64位RHEL Server 7.5上运行的已安装unixODBC版本2.3.1,SQLLEN大小为8。
默认情况下,Sybase驱动程序被符号链接到4字节版本。按照下面的说明,我确保我已链接到8字节版本,并且我的问题已解决。奇怪的是,通过isql
发出命令时,我从未遇到过这些问题。也许您的SQL Server驱动程序可能会受到相同的影响。
也将其发布在相关的GitHub问题之一中: https://github.com/r-dbi/odbc/issues/174#issuecomment-403106647