Pass R Vector to Sql query

前端 未结 4 606
小蘑菇
小蘑菇 2020-12-21 01:14

I\'m using RODBC package to access my sql database in R. I haven\'t been able to find any useful information on how to pass a vector from R to sql as a vector.



        
相关标签:
4条回答
  • 2020-12-21 01:41

    The new dbplyr package has the best answer for this. It allows any R object to be used, and automatically converts it to SQL

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

    0 讨论(0)
  • 2020-12-21 01:45

    1) sprintf Convert id into a string suitable for inclusion in the SQL statement and then insert it into the sql string using sprintf See ?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$ or use fn$ from the gsubfn package. Prefacing sqlQuery (or any R function) with fn$ causes the actual arguments to be scanned and the $variables replaced with their contents (where the variable names should only contain letters and numbers in order for it to distinguish between them and other strings). See ?fn .

    library(gsubfn)
    
    fn$sqlQuery(channel = channel, query = "select *
           from prod_cust_vw.store_dim
           where store_num in ($idString)")
    
    0 讨论(0)
  • 2020-12-21 01:49

    I want to try and figure out how to do this using R Notebook SQL chunk, but have not been able to figure it out. I had lots of trouble with other methods. This works for me.

    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.
    
    0 讨论(0)
  • 2020-12-21 02:00

    I do it like this.

    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)
    
    0 讨论(0)
提交回复
热议问题