La mia tabella di database si presenta circa così:RODBC: SQLUpdate() non riconosce colonna indice
+-----+-------+--------------------+-----------+----------+
| 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 |
+-----+-------+--------------------+-----------+----------+
La prima colonna (ID1) è definita come PK. Tuttavia, ID2 è anche unico.
Ora mi piacerebbe essere in grado di modificare FilePath2
e Status
con R utilizzando sqlUpdate()
dal pacchetto RODBC
. Così provo seguente:
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)
cui db.df
è un frame di dati con i nomi una riga e di colonna corrispondenti a quelli nella tabella di database (tuttavia, lascio alcune delle colonne, in questo caso FilePath1
, e preferirei lasciare fuori anche ID1
, se possibile). Il mio obiettivo è quello di ottenere il seguente:
+-----+-------+--------------------+--------------------+----------+
| 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 |
+-----+-------+--------------------+--------------------+----------+
ottengo l'errore folllowing:
Error in sqlUpdate(myconn, db.df, tablename = 'mytable', index = 'ID2', :
index column(s) ID2 not in database table
Quale potrebbe essere la ragione di questo problema?
EDIT: Ho bypassato il problema con l'invio di una query SQL diretta:
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)
Anche se questo potrebbe non essere un modo pulito, fa quello che dovrebbe fare. Tuttavia, non riesco ancora a capire qual è il problema con sqlUpdate
, quindi spero che qualcuno possa far luce su di esso.