sqlSave in R创建数据帧并将其保存到sql表中

sqlSave in R创建数据帧并将其保存到sql表中,sql,r,db2,rodbc,Sql,R,Db2,Rodbc,您好,我正在使用R将数据帧保存到DB2SQL表中。我似乎能够创建表框架,但不能将数据附加到表中- >df <- read.csv("dat.csv") 在这里,我可以通过选择数据库上的空表“sqltable”来确认创建了表 因此,现在我需要通过以下操作将“dat.csv”中的数据添加到“sqltable”中: >sqlSave(channel, df, "sqltable", verbose=T, fast=T, append=T) no: 1 rownames 1/***

您好,我正在使用R将数据帧保存到DB2SQL表中。我似乎能够创建表框架,但不能将数据附加到表中-

>df <- read.csv("dat.csv")
在这里,我可以通过选择数据库上的空表“sqltable”来确认创建了表

因此,现在我需要通过以下操作将“dat.csv”中的数据添加到“sqltable”中:

>sqlSave(channel, df, "sqltable", verbose=T, fast=T, append=T)

no: 1 rownames 1/***/no: 2 col1 31105/***/no: 3 col2 0.001/***/
no: 2 rownames 1/***/no: 2 col1 31106/***/no: 3 col2 0.023/***/
no: 3 rownames 1/***/no: 2 col1 31107/***/no: 3 col2 1.456/***/
no: 4 rownames 1/***/no: 2 col1 31108/***/no: 3 col2 0.001/***/
no: 5 rownames 1/***/no: 2 col1 31109/***/no: 3 col2 2.102/***/
在我这么做之前,一切似乎都很好:

>sqlQuery(channel,"select * from sqltable")

[1] COL1     COL2
<0 rows> or 0-length row.names
sqlQuery(频道,“从sqltable中选择*”) [1] COL1 COL2 或0长度的行名称
sqlSave命令清楚地从dat.csv中提取数据,那么为什么不将其添加到表中呢?我做错了什么?

在sqlSave中定义varTypes是个好主意。我是这样做的。:-)

如果已经添加了表,那么我会在添加之前执行sqlDrop

为什么这是一个答案?


我也有同样的问题。我收到一个错误,说它无法执行sqlSave,但它正在将我的列放入数据库中。所以我必须修复列类型。R尝试手动执行,但并不完美。:-)

sqlSave()中使用
rownames=FALSE


因为您并没有提供来自dat.csv的数据示例,所以我假设它基于您的sqlSave代码块有两列。在create语句中,sqltable只有2列;sqlSave默认为
rownames=TRUE
,这将使您从数据框输入的数据有3列,而不是您想要的2列。如果试图在Microsoft SQL Server表中放置3列,其中2列不包含
rownames=FALSE
,则我的R会话将因一个致命错误而中止。

我对
R
一无所知,但您是否必须
提交插入操作,否则它会自动回滚?您使用的是什么类型的连接,您的DB2服务器运行的是什么类型的操作系统?我收到一个错误,
“cbind_all(x)中的错误:参数1必须有名称”。
设置
rownames=F
修复了错误或me@Nova,如果您试图弄清楚在R中使用什么ODBC连接器,我建议使用DBI而不是RODBC。DBI允许更好地控制所使用的模式,而RODBC的sqlSave只使用默认模式。DBI也可能比RODBC有更多活跃的开发人员。谢谢Jared,这太周到了!
>sqlQuery(channel,"select * from sqltable")

[1] COL1     COL2
<0 rows> or 0-length row.names
columnTypes <- list(ColumnName="varchar(255)", NumberColumn="float", datecolumn="date")
sqlSave(channel, YourTable, rownames = FALSE, varTypes = columnTypes)