私のデータベーステーブルはおおよそ次のようになります。
+-----+-------+--------------------+-----------+----------+
| 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 も一意です。
今、パッケージから変更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
で は、データベース テーブル内の名前に対応する 1 つの行と列の名前を持つデータ フレームです (ただし、この場合、いくつかの列を省略しています。可能であれば、も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
ので、誰かがそれを明らかにしてくれることを願っています.