使用R(DBI程序包)从SQL Server表中删除行

时间:2019-04-26 19:40:59

标签: r dplyr odbc dbi

我在SQL Server中有一个要向其添加数据的表。在添加数据之前,我想删除所有现有记录,但是我不想删除表并重新创建它,因为它在SQL Server中创建了要保留的索引。

使用r完成此操作我需要选择什么?

2 个答案:

答案 0 :(得分:2)

有多种删除表中所有记录的方法。

您可以TRUNCATEDELETE

dbSendQuery(con, "TRUNCATE TABLE TableName")
dbSendQuery(con, "DELETE FROM TableName")

答案 1 :(得分:2)

如果您只需要删除某些记录

当您只需要从数据库中删除某些记录时,要回答另一个用例,您可以创建一个查询列表,然后使用 map 来执行它们。例如,下一个代码将删除 id 为 1 到 5 的行。

library(purrr) # for the map() function
library(comprehenr) # for the to_vec() function. This are list comprehensions in R.

# listing the ids we want to delete
ids = c(1,2,3,4,5)

# creating list of DELETE queries with each id
delete_queries = paste0("DELETE FROM tablename WHERE (id = '", to_vec(for(id in ids) ids), "');")

# executing each query
map(.x = delete_queries, .f = dbExecute, conn = con)

请注意,我们使用 dbExecute 而不是 dbSendQuery,因为它返回受影响的记录数,因此我们可以确定操作发生了。