我的数据库表大致如下所示:
+-----+-------+--------------------+-----------+----------+
| ID1 | ID2 | FilePath1 | FilePath2 | Status |
+-----+-------+--------------------+-----------+----------+
| 1 | Test1 | MyFolder\R\Folder1 | NULL | Open |
| 2 | Test2 | MyFolder\R\Folder2 | NULL | Open |
| 3 | Test3 | MyFolder\R\Folder3 | NULL | Finished |
| 4 | Test4 | MyFolder\R\Folder4 | NULL | Finished |
+-----+-------+--------------------+-----------+----------+
第一列 (ID1) 定义为 PK。但是,ID2 也是唯一的。
现在我希望能够使用from package更改FilePath2
和Status
使用 R。所以我尝试以下方法:sqlUpdate()
RODBC
db.df <- data.frame(ID1=1, ID2='Test1',
FilePath2='MyFolder\R\Folder5', Status='Finished',
stringsAsFactors=FALSE)
sqlUpdate(myconn, db.df, tablename='mytable', index='ID2', verbose=TRUE)
其中db.df
是一个数据框,其中一行和列名对应于数据库表中的行名(但是,在这种情况下,我省略了一些列,如果可能的话,我也FilePath1
更愿意省略ID1
)。我的目标是获得以下内容:
+-----+-------+--------------------+--------------------+----------+
| ID1 | ID2 | FilePath1 | FilePath2 | Status |
+-----+-------+--------------------+--------------------+----------+
| 1 | Test1 | MyFolder\R\Folder1 | MyFolder\R\Folder5 | Finished |
| 2 | Test2 | MyFolder\R\Folder2 | NULL | Open |
| 3 | Test3 | MyFolder\R\Folder3 | NULL | Finished |
| 4 | Test4 | MyFolder\R\Folder4 | NULL | Finished |
+-----+-------+--------------------+--------------------+----------+
我收到以下错误:
Error in sqlUpdate(myconn, db.df, tablename = 'mytable', index = 'ID2', :
index column(s) ID2 not in database table
这个问题的原因可能是什么?
编辑:我通过发送直接 SQL 查询绕过了这个问题:
out.path <- 'MyFolder\\\\R\\\\Folder5'
update.query <- paste("UPDATE mytable ",
"SET FilePath2='", out.path, "', Status='Finished' ",
"WHERE ID2='Test1'", sep="")
dummy <- sqlQuery(myconn, update.query)
虽然这可能不是一个简洁的方式,但它做了它应该做的事情。但是,我仍然不明白这是怎么回事sqlUpdate
,所以我希望有人能解释一下。