我在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
答案 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要更新的列。 希望这有帮助!