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

时间:2014-02-21 12:29:47

标签: sql r db2 rodbc

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

>df <- read.csv("dat.csv")

其中dat.csv是没有标题的csv,只是两列中的原始数据

然后我创建表:

>sqlQuery(channel, "create table sqltable 
                   (
                   col1  int,
                   col2  float
                   )"
         (

我确认表是通过在数据库中选择空表“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

sqlSave命令清楚地从dat.csv中获取数据,为什么它没有添加到表中?我做错了什么?

2 个答案:

答案 0 :(得分:4)

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

columnTypes <- list(ColumnName="varchar(255)", NumberColumn="float", datecolumn="date")

这定义了数据的列类型,因此您可以在sqlSave中添加参数。所以现在让我们来做sqlSave。

sqlSave(channel, YourTable, rownames = FALSE, varTypes = columnTypes)

如果已经添加了表,那么我之前会做一个sqlDrop。

为什么这是一个答案?

好吧,我遇到了同样的问题。我收到一个错误,说它无法执行sqlSave,但它正在我的数据库中放入我的列。所以我不得不修复columnTypes。 R试图手动完成,但并不完美。 :-)

答案 1 :(得分:1)

rownames = FALSE内使用sqlSave()

由于您没有提供dat.csv中的数据样本,因此我假设它基于您的sqlSave代码块有2列。从你的create语句中,sqltable只有2列; sqlSave默认为rownames = TRUE,这将使您从数据框输入的数据有3列,而不是您想要的2列。通过尝试将3列放入具有2列而没有rownames = FALSE的Microsoft SQL Server表中,我的R会话将因致命错误而中止。