RODBC 错误:SqlSave 无法附加到表

Posted

技术标签:

【中文标题】RODBC 错误:SqlSave 无法附加到表【英文标题】:RODBC error: SqlSave unable to append to table 【发布时间】:2016-04-28 11:44:30 【问题描述】:

我们在使用 RODBC 和 SqlSave 命令时遇到了错误。我们有点困惑该怎么做,因为当我们试图保存到 Sybase 数据库的数据很小(~低于 10.000 行)时,相同的 SqlSave 命令起作用。当尝试保存更大的数据(约 200.000 行)时,保存过程开始时没有任何问题,但在保存几千行后会崩溃。然后我们遇到了这个错误消息“无法附加到表..”

我们使用这种代码:

library(RODBC)

channel <- odbcConnect("linfo-test", uid="DBA", pwd="xxxxxx", believeNRows=FALSE)

sqlSave(channel=channel, dat=matkat, tablename = "testitaulu", append = TRUE)

odbcClose(channel)

如果有人知道为什么只有更大的数据才会发生这种情况以及我们如何解决这个问题,我们将不胜感激。我们自己也缺乏想法。

【问题讨论】:

RODBC 是一个可怕的包,你最好使用 RStudio 设计的 odbc 包来代替。有了 thts,您可以使用 dbWriteTable() 和 append = T。这对我有用 【参考方案1】:

sqlSaveappend=TRUE 几乎永远不会起作用。您将不得不显式编写 SQL INSERT INTO 语句,这很不幸。关于这些坏消息我很遗憾。

【讨论】:

这确实是个坏消息,但感谢您打破它!我花了 30 分钟未能让 sqlSaveappend=TRUE 在最微不足道的情况下工作,很高兴知道这不仅仅是我。【参考方案2】:

sqlSave 正在工作,但您必须非常小心。 你需要记住:

在您的数据框和 sql server 表的 R 列名称中必须完全匹配,并记住 R 区分大小写,即使前导空格或末尾的空格也会有所不同 确保您在 R 和 sql 表中的数据类型匹配 你没有遗漏任何要插入的列(即使它是 sql 中的默认值) 连接必须正确设置,如果 sql 用户没有权限在目标表(用于 sqlSave)中读取和写入,它也可能失败

【讨论】:

以上是关于RODBC 错误:SqlSave 无法附加到表的主要内容,如果未能解决你的问题,请参考以下文章

使用 RODBC 清除特定行

RODBC sqlSave() 和映射列名

RODBC::sqlSave() 创建表,警告:在列中截断为 255 个字节?

如何使用 R 中的函数 sqlSave() 将数据附加到具有 IDENTITY 主键的 SQL Server 表中?

无法在 R 中使用 sqlSave 追加到 SQL Server 表

如何将 sqlSave 函数与 R 中的现有表一起使用