我使用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而不是硬编码。
答案 0 :(得分:6)
1)sprintf 将id
转换为适合包含在SQL语句中的字符串,然后使用sprintf
将其插入sql字符串中。请参阅?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
对fn$
(或任何R函数)进行前缀会导致扫描实际参数并将$变量替换为其内容(其中变量名称应仅包含字母和数字,以便区分他们和其他字符串之间)。请参阅?fn
。
library(gsubfn)
fn$sqlQuery(channel = channel, query = "select *
from prod_cust_vw.store_dim
where store_num in ($idString)")
答案 1 :(得分:0)
我是这样做的。
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)
答案 2 :(得分:0)
新的dbplyr
包具有最佳答案。它允许使用任何R对象,并自动将其转换为SQL
答案 3 :(得分:0)
我想尝试弄清楚如何使用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.