将 R 向量传递给 Sql 查询

Pass R Vector to Sql query

我正在使用 RODBC 程序包访问我在 R 中的 sql 数据库。我无法找到任何有关如何将矢量从 R 传递到 sql 作为矢量.

    id <- ('00003', '00100')
    query <- sqlQuery(channel = channel, query = "select *
                  from prod_cust_vw.store_dim
                  where store_num in id")

我想将 id 向量传递给 sql 而不是对其进行硬编码。

1) sprintfid转换成适合包含在SQL语句中的字符串,然后插入到sql字符串中使用 sprintf 参见 ?sprintf .

id <- c('00003', '00100')
idString <- toString(sprintf("'%s'", id))  # "'00003', '00100'"
sql_fmt <- "select * from prod_cust_vw.store_dim where store_num in (%s)"
sql <- sprintf(sql_fmt, idString)
sql
## [1] "select * from prod_cust_vw.store_dim where store_num in ('00003', '00100')"

2) fn$ 或使用 gsubfn 包中的 fn$。在 sqlQuery (或任何 R 函数)前面加上 fn$ 会导致扫描实际参数并将 $variables 替换为它们的内容(其中变量名称应仅包含字母和数字以便区分它们和其他字符串之间)。参见 ?fn

library(gsubfn)

fn$sqlQuery(channel = channel, query = "select *
       from prod_cust_vw.store_dim
       where store_num in ($idString)")

我是这样做的

library("RODBC")


dbhandle <- odbcDriverConnect('driver={SQL Server};server=Your_Server_Name;database=Your_Database_Name;trusted_connection=true')

currTableSQL<-paste("SELECT * FROM Your_Table",sep="")

currTableDF<-sqlQuery(dbhandle,currTableSQL)

新的 dbplyr 包对此有最佳答案。它允许使用任何 R 对象,并自动将其转换为 SQL

https://db.rstudio.com/dplyr/

我想尝试弄清楚如何使用 R Notebook SQL 块来执行此操作,但一直无法弄清楚。我在使用其他方法时遇到了很多麻烦。这对我有用。

library(RODBC)
myconn<-odbcConnect(dsn = "Data Source Name", 
                uid = rstudioapi::askForPassword("User ID"), 
                pwd = rstudioapi::askForPassword("Database password"))

id<-('00003', '00100') # vector of ID's

id<-paste0(personid, collapse = ", ") #create string for entry into query

query<-paste("select *
              from prod_cust_vw.store_dim
              where store_num in (", id,")", sep = "") #query -- use "paste". I have not tried with "paste0")

data<-sqlQuery(myconn,query)    #obtain the data by applying the query through the connection.