2016-09-22 6 views
4

preview version of RStudio 1.0で利用できるSQL chunk functionを使用して(DBIのRSQLServerバックエンドを使用して)SQLサーバーに接続しようとしていますが、変数を渡すのが難しいです。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 queryusing the pygments for highlightingでRをチャンクでDBIコマンドを実行しているので、コードチャンクを使用すると少しうまくいくはずです。

答えて

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) 
```