【发布时间】:2017-06-30 20:25:34
【问题描述】:
我正在尝试在 rstudio 的 sql 代码块中使用临时表。
一个例子:当我选择一个表并将其返回到一个 r 对象时,事情似乎正在工作:
```{sql , output.var="x", connection='db' }
SELECT count(*) n
FROM origindb
```
当我尝试使用临时表进行任何操作时,似乎命令正在运行,但返回一个空的 r data.frame
```{sql , output.var="x", connection='db' }
SELECT count(*) n
INTO #whatever
FROM origindb
SELECT *
FROM #whatever
```
我的印象是 Rstudio notebook sql 块只是设置为进行一个查询。所以我的临时解决方案是在数据库的存储过程中创建表。然后我可以用一些简单的东西得到我想要的结果。我希望在 sql 代码块中有更多的灵活性。
我的数据库连接如下所示:
```{r,echo=F}
db <- DBI::dbConnect(odbc::odbc(),
driver = "SQL Server",
server = 'sql',
database = 'databasename')
```
【问题讨论】:
-
我认为这个问题与 DBI 将每个查询视为一个单独的事务并因此为每个查询生成一个新的 spid 有关。由于临时表不能跨 spid 存在,因此它不起作用。我很想知道是否有人对此有不涉及创建 R 对象的解决方案,因为我正在尝试做同样的事情并希望从 R Notebook 为 SQL Server 用户创建一个培训文档。