我的數據庫表看起來大約是這樣的:RODBC:SQLUPDATE()不能識別索引列
+-----+-------+--------------------+-----------+----------+
| 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也是獨一無二的。
現在我想能夠使用sqlUpdate()
從RODBC
包改變FilePath2
和Status
與R.所以我嘗試以下方法:
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 |
+-----+-------+--------------------+--------------------+----------+
我得到folllowing錯誤:
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
有什麼問題,所以我希望有人能夠闡明。