2016-09-22 90 views
4

我試圖使用preview version of RStudio 1.0中的SQL chunk function連接到SQL Server(對於DBI使用RSQLServer後端),並且在傳遞變量時遇到一些困難。將查詢作爲變量傳遞給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達到我想要的效果,並在R塊中用DBI命令運行查詢,所以使用代碼塊會更好一些。

回答

2

看起來像Using R variables in queries適用於某種類型的轉義,因此只能用於像文檔(SELECT * FROM trials WHERE subjects >= ?subjects)中的示例那樣的情況,但不能動態設置整個查詢。

相反,code chunk option可用於實現期望的行爲:

該示例使用從sqlitetutorial.netSQLite 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) 
```