ras*_*ale 5 sql r delete-row rodbc
我在R中有一个包含记录列表的数据框.我想删除ODBC数据源中的所有匹配记录.
data_to_delete ##This is my dataframe
delete from RODBC datasource where record_id IN (select record_id
from data_to_delete)
Run Code Online (Sandbox Code Playgroud)
关于如何实现这一点的任何想法?我目前正在使用sqlQuery来下载数据和sqlSave来创建新记录,但我不知道如何删除记录.
正如此相关问题的答案所解释的那样,您将需要以编程方式构建保存该DELETE语句的字符串,然后您可以DELETE像执行sqlQuery.
因此,在 的末尾DELETE,不要尝试从 R 变量中“选择”,而只是将其内容转储到以逗号分隔的字符串中。下面,我假设无论data_to_delete是什么,我们都可以使用pastewithas.character将其吐出为逗号分隔的字符串。但您可以根据需要对其进行修改。
我还假设您的意思是datasource引用数据库,并且我用作some_table_name该数据库中表名称的占位符。您应该根据您的具体情况调整这些值。
del_query <- sprintf("DELETE from some_table_name
where record_id IN (%s)",
paste(as.character(data_to_delete),
collapse=", ")
)
sqlQuery(datasource, del_query)
Run Code Online (Sandbox Code Playgroud)
使用此方法时,如果数据内容很大,则需要小心。子句中可以出现的不同符号的数量通常有符号限制IN,例如 SQL Server 中默认为 2000 个符号。
如果您需要比这更多的值,您可以首先发出一个查询,将这些值完全写入数据库上的临时表中,然后发出一个sqlQuery包含额外值的查询IN ( SELECT * FROM ... ),但您将从该临时表中查询,而不是“来自”R 变量。