如何根据R中的数据框从ODBC数据库中删除记录

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来创建新记录,但我不知道如何删除记录.

ely*_*ely 4

如此相关问题的答案所解释的那样,您将需要以编程方式构建保存该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 变量。