我有一个功能
testFun <- function(myTeam){
print(myTeam)
teamResults <- sqlQuery(channel,paste(
"
SELECT soccer.tblResultsallMore.TEAMNAME,
sum(case when soccer.tblResultsallMore.RES='W' then 1 else 0 end) as W,
sum(case when soccer.tblResultsallMore.RES='L' then 1 else 0 end) as L,
sum(case when soccer.tblResultsallMore.RES='D' then 1 else 0 end) as D
FROM soccer.tblResultsallMore
WHERE soccer.tblResultsallMore.TEAMNAME=myTeam
GROUP BY soccer.tblResultsallMore.TEAMNAME
"))
return(teamResults) # no error if this is not returned
}
testFun("Everton")
我在代码中硬编码'Everton',我得到了所需的输出
[1] "Everton"
TEAMNAME W L D
1 Everton 1734 1463 1057
但是参数有错误
[1] "Everton"
[1] "42S22 207 [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'myTeam'."
[2] "[RODBC] ERROR: Could not SQLExecDirect
非常感谢
答案 0 :(得分:2)
在您提供的代码中,名称myTeam
未被替换,它被视为字符串,sql语句将查找名为myTeam
的团队。
variabel = "spam"
paste("from table select variabel")
不将"spam"
放在paste
内的sql语句中。正确的语法是:
paste("from table select ", variabel)
在你的情况下,我会使用sprintf
。一个例子:
variabel = "spam"
sprintf("from table select %s", variable)
有关详细信息,请参阅sprintf
的文档。
关于您的注释,如果没有显式的return语句,则返回最后一个计算的表达式。有关讨论,请参阅: