我在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)......但仍然没有被选中。
你可以帮我查询。
答案 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]))