我在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
答案 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()
}