R中参数化的Sql Query无法正常工作

时间:2014-06-19 10:59:16

标签: r sql-server-2008

我在R中有一个查询,它从SQL Server中提取数据,将列值作为命令行参数。但它不会导致任何输出。

library(RODBC)
argv <- commandArgs(TRUE)
dbhandle <- odbcDriverConnect('driver={SQL Server};server=<srvr_nm>; database=<db>; trusted_connection=true')
res <- sqlQuery(dbhandle, 'select  * from table where col = \'argv[1]\'')

这就是我的称呼方式

C:\Users\uid>"C:\Program Files\R\R-3.1.0\bin\x64\Rscript.exe" --slave --vanilla "c:\R\script.R" "abc" 

(即使我在传递时从命令行参数中删除了引用也没有帮助)

我得到的输出是:

<0 rows> (or 0-length row.names)

当我看到传递的内容有引号时......例如&#34; abc&#34; ...存储在表中的值是abc(不带引号)。我试图用

删除引号
as.name(argv[1])

但它也没有帮助......

然后我在表格中插入一个值,如&#34; abc&#34; (而不是abc)......但仍然没有被选中。

你可以帮我查询。

2 个答案:

答案 0 :(得分:0)

在gsubfn包中尝试fn$

library(gsubfn)
argv <- gsub('"', '', commandArgs(TRUE)) # remove double quotes

# ...

res <- fn$sqlQuery(dbhandle, "select  * from table where col = '`argv[1]`' ")

或将最后一行替换为:

argv1 <- argv[1]
res <- fn$sqlQuery(dbhandle, "select  * from table where col = '$argv1' ")

答案 1 :(得分:0)

除非sqlQuery有一些特殊的内部查询解析,否则字符串'argv[1]'将不会计算为argv[1]的值,但会保持未解析。

尝试其中任何一项

res <- sqlQuery(dbhandle,
    paste('select  * from table where col = \'', argv[1], '\'', sep=""))
res <- sqlQuery(dbhandle,
    sprintf('select  * from table where col = \'%s\'', argv[1]))