2016-09-22 3 views
4

preview version of RStudio 1.0에서 사용할 수있는 SQL chunk function을 사용하여 DBI 용 RSQLServer 백엔드를 사용하여 SQL Server에 연결하려고합니다. 변수를 전달하는 데 어려움이 있습니다. 내가 서버에 연결 한 후 예상Rmarkdown sql chunk에 쿼리를 변수로 전달

```{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으로 원하는 것을 얻을 수 있으며 DB 청크로 쿼리를 실행하므로 코드 청크를 사용하는 것이 약간 더 좋을 것입니다.

답변

2

Using R variables in queries처럼 보이기 때문에 문서의 예제 (SELECT * FROM trials WHERE subjects >= ?subjects)와 같은 경우에만 사용할 수 있지만 전체 쿼리를 동적으로 설정할 수는 없습니다.

대신 code chunk option 원하는 동작을 달성하기 위해 사용될 수있다

예는 sqlitetutorial.net에서 SQLite sample database을 이용한다. 코드를 실행하기 전에 작업 디렉토리에 압축을 풉니 다.

```{r} 
library(DBI) 
db <- dbConnect(RSQLite::SQLite(), dbname = "chinook.db") 
query <- "SELECT * FROM tracks" 
``` 


```{sql, connection=db, code = query} 
``` 
+0

출력물을 내 질문에 설명 된 것보다 더 편리한 방법으로 강조 표시합니다. 그러나 그것이 실행되지 않는 것 같습니다. – NGaffney

0

나는 인쇄 그러나 내 원하는 출력을 달성하는 것이 가능 코드의 몇 가지 추가 라인과 같은 덩어리로 실행하는 방법을 결정할 수 없었다.

인쇄가 CL.'s answer으로 해결 된 후 EXEC을 사용하여 코드를 실행할 수 있습니다.

```{sql, code = query} 
``` 

```{sql, connection = svr} 
EXEC (?query) 
```