我有一个包含三列(a、B、c)的 Dataframe (df)
我使用以下命令将这些值插入SQL数据库
df <- data.frame(a=1:10, b=10:1, c=11:20)
values <- paste("(",df$a,",", df$b,",",df$c,")", sep="", collapse=",")
cmd <- paste("insert into MyTable values ", values)
result <- sqlQuery(con, cmd, as.is=TRUE)
来源:How to insert a dataframe into a SQL Server table?
我的问题是这个例子的update等价物是什么?
cmd <- paste("update MyTable values ", values)
result <- sqlQuery(con, cmd, as.is=TRUE)
我尝试了sqlSave和sqlUpdate,但是它很快就出现了错误消息,比如缺少列、索引等......所以我回到上面的例子,尝试学习如何使用基于玩具数据集的更新语句。非常感谢各位的帮助。
3条答案
按热度按时间yfjy0ee71#
首先,
UPDATE
的语法是错误的。所以你不能像你所做的那样把值构建成一个连接的向量。如果你没有选择一个带有
WHERE
的特定元素,你将在column1
中的所有值上更新value1
的值。EDIT:如果你不能匹配条件,那么你实际上不是在更新,而是在插入,其形式如下:
INSERT INTO语句可以用两种形式编写。
第一种形式不指定要插入数据的列名,只指定列名的值:
第二种形式指定要插入的列名和值:
如果你想做一些更复杂的事情,你需要用SQL来构建查询,可能首先要用R以外的语言,至少要学习一下。如果你还不习惯使用SQL,可以尝试一下SQL fiddle。
zsohkypk2#
我知道这个问题是张贴超过4年前,但我希望这将有助于其他用户谁正在寻找这个答案。
我刚刚在GitHub上发布了这个问题的解决方案,如果您正在寻找一个更有指导性的演练。
mnemlml83#
我知道这个帖子已经有好几年了,但是如果有人现在偶然发现这个,我想我应该写一个更好的答案。OP试图使用的方法是非常痛苦和低效的。你可以简单地使用dbWriteTable命令。你可以直接将数据从 Dataframe 插入到一个以前不存在的新表中,或者你可以通过设置append = TRUE选项来追加一个现有的表。请参阅help(dbWriteTable)了解其他选项,以及指定列数据类型。注意,在下面的示例中,我定义了SQL Server名称和数据库名称,但出于明显的安全原因,我没有在此处显示它们的值。我包含了命令和相应的输出。