Вы можете создать свое предложение WHERE, используя вектор идентификаторов учетных записей.
query <-
paste0("SELECT * FROM [TABLE] WHERE [AcctID] IN (",
paste0(Dframe$AcctID, collapse = ", "), ")")
query
[1] "SELECT * FROM [TABLE] WHERE [AcctID] IN (1002, 1005, 1007, 1009)"
Это будет работать для числовых значений c в предложении WHERE. Если вам нужно отфильтровать по строкам, вы можете сделать аналогичный шаблон, но вам необходимо: 1) вставить одинарные кавычки вокруг значений и 2) оценить риск SQL атак инъекций.
Параметризованные запросы полезны здесь, но код выглядит немного более отвратительно. Это должно работать как для числовых c, так и для строковых предложений WHERE.
library(DBI)
conn <- dbConnect(...) # make your ODBC connection
Dframe <- data.frame(AcctID = c(1002, 1005, 1007, 1009))
param_list <- lapply(Dframe$AcctID, identity)
names(param_list) <- sprintf("x%s", seq_along(Dframe$AcctID))
query <- paste0("SELECT * FROM [TABLE] WHERE [AcctID] IN (",
paste0(sprintf("?%s", names(param_list)), collapse = ", "), ")")
Out <-
dbGetQuery(
conn,
sqlInterpolate(
conn,
query,
.dots = param_list
)
)