【发布时间】:2018-07-30 16:59:59
【问题描述】:
问题
无法将 NA 值从 data.frame 插入到数据库表中
步骤
-
将表从 SQL 服务器读入 R
data.frame。表格是十进制的,带有一些NULL。 data.frame 是带有一些NA的数字。 -
dBWriteTable抛出以下错误Error in .local(conn, statement, ...) : execute JDBC update query failed in dbSendUpdate (传入的表格数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。参数 57 ("") : 提供的值不是浮点数据类型的有效实例。请检查源数据中的无效值。无效值的示例是小数位数大于精度的数字类型数据。)
-
我用 0 覆盖 NA,例如
dataset$column[is.na(dataset$column)] = 0 -
dBWriteTable成功写入数据库
R 详细信息
> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Server 7.5 (Maipo)
RJDBC_0.2-7.1 rJava_0.9-10 DBI_1.0.0
【问题讨论】:
-
是否已将基础表配置为允许空值?
-
这是一个有趣的错误,如果您可以设置可重现的示例,请将问题发布到 rjdbc git page。如果您可以下载SQL Server ODBC driver 并使用
odbc包(也使用DBI),那么您是否可以使用NA 重新创建dbWriteTable()错误会很有趣。 -
@Parfait:只是忘了提一下,如果我将
RODBC与sqlSave一起使用,一切都会顺利进行,但速度会慢很多!无论如何,感谢您指出 git 页面,那里有一个与我的相同问题的人LINK。恢复到旧版本的包可以解决问题,但现在执行时间更糟:0.2-70.97'' vs0.2-539.8''。我认为-7他们引入了批量插入。 -
请注意:
odbc与RODBC不同。但是,两者都使用 ODBC 驱动程序。使用 DBI 投诉库可能会更好。 -
@Parfait 我什至尝试过
odbc,但从性能的角度来看结果是一样的。非常感谢您的支持。
标签: r sql-server rjdbc