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 )определяется как ПК. Однако ID2 также уникален.

Теперь я хотел бы иметь возможность изменить 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, поэтому я надеюсь, что кто-то может пролить свет на это.

9
задан AnjaM 14 August 2012 в 03:19
поделиться