通过R sqlSave更新SQL表

时间:2013-04-23 09:13:49

标签: sql r sql-update rodbc

我在R中有一个有3列的数据框,使用sqlSave我可以轻松地在SQL数据库中创建一个表:

channel <- odbcConnect("JWPMICOMP")
sqlSave(channel, dbdata, tablename = "ManagerNav", rownames = FALSE, append = TRUE, varTypes = c(DateNav = "datetime"))
odbcClose(channel)

此数据框包含有关管理员(名称,导航和日期)的信息,这些信息每天都会使用当前日期的新值进行更新,如果出现错误,也可能会更新旧值。

如何在R中完成此任务?

我决心使用sqlUpdate,但它返回以下错误:

> sqlUpdate(channel, dbdata, tablename = "ManagerNav")
Error in sqlUpdate(channel, dbdata, tablename = "ManagerNav") : 
  cannot update ‘ManagerNav’ without unique column

2 个答案:

答案 0 :(得分:8)

当你创建一个表“white shark-way”(参见文档)时,它不会获得主索引,而只是普通的列,而且通常是错误的类型。通常,我使用您的方法来获取列名称,但之后您应该进入数据库并分配主索引,正确的列宽和类型。

之后,sqlUpdate()可能有效;我说可能,因为我放弃使用sqlUpdate(),有太多警告,并使用sqlQuery(..., paste("Update....)))进行实际工作。

答案 1 :(得分:3)

我将为此做的是以下

解决方案1 ​​

sqlUpdate(channel, dbdata,tablename="ManagerNav", index=c("ManagerNav"))

解决方案2

Lcolumns <- list(dbdata[0,]) 
sqlUpdate(channel, dbdata,tablename="ManagerNav", index=c(Lcolumns))

索引用于指定R要更新的列。 希望这有帮助!