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
来避免它,而不是使用正确的格式创建表,然后使用sqlSave
和append=T
来强制我的R 表进入数据库表。这解决了很多问题,例如日期格式和浮点数(而不是双精度数)。
【讨论】:
以上是关于RODBC sqlSave() 和映射列名的主要内容,如果未能解决你的问题,请参考以下文章
RODBC::sqlSave() 创建表,警告:在列中截断为 255 个字节?
当保存到 SQL Server 到 varchar(255) 时,RODBC::sqlsave() 会截断 DF 中的 col