R和MSSQL - 与临时表通信(在通道上找不到表)

时间:2017-04-17 17:52:14

标签: sql sql-server r rodbc

我尝试使用RODBC以下列方式更新全局临时表:

library(RODBC)
channel <- odbcConnect("RDataSource", uid = "user", pwd = "password")    
query <- "select * from ##TempTable"
table_data <- sqlQuery(channel, query)
# data frame creation
sqlUpdate(channel, data_frame, index = "id", verbose = TRUE, tablename = "##TempTable")

选择查询执行得很好,但是sqlUpdate失败并显示错误消息: &#34; odbcTableExists(channel,tablename)出错:'## TempTable':在频道&#34上找不到表格;

我认为这个错误的原因可能与使用&#39;#&#39;以临时表的名义。

UPD:我在使用sqlSave函数时遇到了同样的错误。只有在我创建临时表时才会出现此错误,通常的SQL表一切正常。 全局临时表在调用R代码之前创建。

那么,有没有办法使用Rql函数(如sqlSave()和sqlUpdate()与MSSQL数据库中的临时表进行通信?

1 个答案:

答案 0 :(得分:2)

我终于发现此错误的原因是在ODBC数据源的设置中。似乎使用诸如sqlSave或sqlUpdate之类的R函数与临时表进行通信需要将ODBC数据源中的默认数据库设置为&#39; tempdb&#39;。 所以,现在我能够使用sqlSave()函数在临时表中插入值。事实上,这个函数比使用sqlQuery函数具有更好的性能,直接&#39; INSERT&#39;查询作为参数。