【问题标题】:How to pass function parameters in sql query in R? [duplicate]如何在R中的sql查询中传递函数参数? [复制]
【发布时间】:2017-10-30 15:54:36
【问题描述】:

我在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 参数传递给cond 属性的where 条件。比如我要计算func(10),那么查询一定是:

select attr from myTable where cond = 10

【问题讨论】:

  • 请正确定义 parameter 的含义,因为有一个称为 SQL 参数化的概念,除了 RODBC 包中的一个之外,以下大多数答案都没有使用。跨度>

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


【解决方案1】:

你可以试试paste:

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

【讨论】:

【解决方案2】:

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

library(RODBCext)

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

【讨论】:

    【解决方案3】:

    我喜欢这些东西的glue 包,虽然它和paste 完全一样,只是更漂亮:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-22
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 2011-07-23
        相关资源
        最近更新 更多