如何在R中的sql查询中传递函数参数?

时间:2017-10-30 15:54:37

标签: sql sql-server r function parameter-passing

我在R中有以下功能:

dbhandle <- odbcDriverConnect('driver={SQL Server};
                              server=myServer;database=myDB;
                              trusted_connection=true')
func <- function(x){
     sqlQuery(dbhandle, 'select attr from myTable where cond = x')
}

我想知道如何将x参数传递给where属性的cond条件。例如,我想计算func(10),然后查询必须是:

select attr from myTable where cond = 10

4 个答案:

答案 0 :(得分:3)

您可以尝试使用paste

func <- function(x){
  sqlQuery(dbhandle, paste('select attr from myTable where cond =', x))
}

答案 1 :(得分:3)

使用RODBC时,我更喜欢使用参数化查询。传递字符串时,这会变得更有价值,因为这可以避免SQL注入。

library(RODBCext)

sqlExecute(dbhandle, 
           "select attr from myTable where cond = ?",
           data = list(cond = 10),
           fetch = TRUE,
           stringsAsFactors = FALSE)

答案 2 :(得分:1)

我喜欢这些内容的glue包,虽然它与paste非常相似,但更漂亮:

library(glue)

func <- function(x){
     sqlQuery(dbhandle, glue('select attr from myTable where cond = {x}'))
} 

答案 3 :(得分:-2)

在这个简单的例子中,您甚至可以使用dplyr本身:

library(dplyr)

func <- function(x) {
     tbl(dbhandle, "myTable") %>%
       select(attr) %>%
       filter(cond == x) %>%
       collect()
}