我尝试使用SQL chunk function中提供的preview version of RStudio 1.0连接到SQL Server(使用RSQL的DBQL后端),并且我在传递变量方面遇到了一些困难
如果我连接到服务器,然后将查询放入块中,则按预期工作
```{r, eval = F}
svr <- dbConnect(RSQLServer::SQLServer(), "Server_name", database = 'Database_name')
query <- 'SELECT TOP 10 * FROM Database_name.dbo.table_name'
```
```{sql, connection = svr, eval = F}
SELECT TOP 10 * FROM Database_name.dbo.table_name
```
但是如果我尝试将查询作为变量传递,则会抛出错误
```{sql, connection = svr, eval = F}
?query
```
Error: Unable to retrieve JDBC result set for 'SELECT TOP 10 * FROM Database_name.dbo.table_name': Incorrect syntax near 'SELECT TOP 10 * FROM Database_name.dbo.table_name'.
Failed to execute SQL chunk
我认为这与R在引号中包含字符向量的方式有关,因为如果运行以下代码,我会得到相同的错误。
```{sql, connection = svr, eval = F}
'SELECT TOP 10 * FROM Database_name.dbo.table_name'
```
有没有办法解决这个错误?
目前,我可以通过using inline expressions to print the query,using the pygments for highlighting实现我想要的功能,并使用DBI命令在R块中运行查询,因此使用代码块会更好一些。
答案 0 :(得分:4)
看起来Using R variables in queries会应用某种转义,因此只能用于文档(SELECT * FROM trials WHERE subjects >= ?subjects
)中的示例,但不能动态设置整个查询。
相反,code
chunk option可用于实现所需的行为:
该示例使用SQLite sample database中的sqlitetutorial.net。在运行代码之前将其解压缩到您的工作目录。
```{r}
library(DBI)
db <- dbConnect(RSQLite::SQLite(), dbname = "chinook.db")
query <- "SELECT * FROM tracks"
```
```{sql, connection=db, code = query}
```
答案 1 :(得分:1)
我还没有能够确定在同一块中打印和执行的方法,但是通过一些额外的代码行可以实现我想要的输出。
打印由CL.'s answer解决,然后我可以使用EXEC来运行代码。
```{sql, code = query}
```
```{sql, connection = svr}
EXEC (?query)
```