Rmarkdown - 在动态SQL块中使用表名作为变量?

6

我需要在我的Rmarkdown中执行一个SQL引擎块,在查询的 表格 具有动态名称,由R代码定义。

我知道使用?将变量链接到当前的R环境是可行的,但这仅适用于字符串和数字,而不适用于 "对象"。

当然,我可以使用DBI::dbGetQuery()运行SQL查询,但这意味着必须将所有请求(非常长)作为字符串构建,这很不方便(我要运行很多块)。

基本上我需要的是:

`` {r}
mytable <- "name_of_table_on_sql_server"
`` 

那么

`` {sql} 
select * from ?mytable
`` 

这个失败是因为创建的查询是select * from "name_of_table_on_sql_server",而 SQL 需要select * from name_of_table_on_sql_server(没有引号)。

使用glue将 mytable 定义为mytable <- glue("name_of_table_on_sql_server")也不起作用。

有什么想法吗?


我不是很确定,但也许可以这样写: mytable <- noquote("name_of_table_on_sql_server") - maydin
不,这会得到与glue()as.name()相同的错误:Error in interpolate_from_env(conn, sql) : Object(s) not found: " name_of_table_on_sql_servers " Failed to execute SQL chunk(注意表名周围的空格?) - Jrm_FRL
1个回答

6
我对你发布的内容进行了微调(由于我没有SQL Server,所以我使用sqlite进行测试):
`` {r}
library(glue)
mytable <- glue_sql("name_of_table_on_sql_server")
`` 

那么

`` {sql} 
select * from ?mytable;
`` 

我所做的唯一真正的改变是使用函数 glue_sql 并在 SQL 代码块的末尾添加分号 (;)。


1
非常感谢!这个解决方案运行得非常完美。我从来没有想过要寻找这个“sql_glue”函数。 - Jrm_FRL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接