RODBC sqlSave() 和映射列名

Posted

技术标签:

【中文标题】RODBC sqlSave() 和映射列名【英文标题】:RODBC sqlSave() and mapping column names 【发布时间】:2010-04-08 14:20:30 【问题描述】:

我有一个关于使用 sqlSave 的问题。 R如何将数据框中的RODBC数据映射到数据库表列?

如果我有一个包含 X 和 Y 列的表和一个包含 X 和 Y 列的数据框,RODBC 会将 X 放入 X 并将 Y 放入 Y(我通过跟踪错误发现)。但是我可以明确告诉 R 如何将 data.frame 列映射到数据库表列,例如将 A 放在 X 中,将 B 放在 Y 中。

我对 R 比较陌生,认为 RODBC 手册有点神秘。我在网上也找不到例子。

【问题讨论】:

【参考方案1】:

我现在就是这样做的(也许这也是你的意思):

colnames(dat) <- c("A", "B")
sqlSave(channel, dat, tablename = "tblTest", rownames=FALSE, append=TRUE)

它对我有用。感谢您的帮助。

【讨论】:

在保存之前更改对象,虽然完成工作,但不是您要求的。 可以,但是改变的对象只是暂时的,所以没问题【参考方案2】:

当您开始探索 R 时,您应该会找到对您有很大帮助的精美 R 手册,它的帮助工具也非常好。

如果你从

开始
  help(sqlSave)

您将看到colNames 参数。提供向量 c("A", "B") 会将您的第一个 data.frame 列放入表列 A 等中。

【讨论】:

“它的帮助设施”是什么意思?我使用cran.r-project.org/web/packages/RODBC/RODBC.pdf。但是该文档将“colnames”参数称为“逻辑:将列名保存为表的第一行?”,而不是作为向量提供 columnNAMES “colnames”参数仍然是合乎逻辑的 需要注意的是,从 RODBC-1.3.13 开始,sqlSave 的源代码中对 colnames 的唯一引用是在单个比较中:` if (is.logical(colnames) && colnames)`(以及该 if 语句中的后续块),表明字符向量将不起作用(不再起作用?)。 (也许这些年来行为发生了变化,*耸耸肩*。)【参考方案3】:

我在将 sqlSave 与 IBM DB2 数据库一起使用时遇到了很多问题。我试图通过使用sqlQuery 来避免它,而不是使用正确的格式创建表,然后使用sqlSaveappend=T 来强制我的R 表进入数据库表。这解决了很多问题,例如日期格式和浮点数(而不是双精度数)。

【讨论】:

以上是关于RODBC sqlSave() 和映射列名的主要内容,如果未能解决你的问题,请参考以下文章

RODBC 错误:SqlSave 无法附加到表

RODBC sqlSave 列类型:如何确定?

RODBC sqlSave 崩溃 R 前端

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

当保存到 SQL Server 到 varchar(255) 时,RODBC::sqlsave() 会截断 DF 中的 col

来自 RODBC 的 sqlSave 仅在 R 中保存日期的年份