【发布时间】:2017-04-17 17:52:14
【问题描述】:
我正在尝试通过以下方式使用 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 失败并显示错误消息: “odbcTableExists(channel, tablename) 中的错误:‘##TempTable’:在通道上找不到表”
我想这个错误的原因可能与在临时表的名称中使用“#”有关。
UPD:我在使用 sqlSave 函数时遇到了同样的错误。此错误仅在我创建临时表时发生,通常的 SQL 表一切正常。 全局临时表在调用 R 代码之前创建。
那么,有没有什么方法可以使用 sqlSave() 和 sqlUpdate() 等 R 函数与 MSSQL 数据库中的临时表进行通信?
【问题讨论】:
-
它可能是字符扔掉它,它也可能需要一个模式名称。我会将 schema = "
" 添加到您的命令中,看看是否有帮助。您也可以尝试将表的名称更改为更适合 sql 的名称;) -
在 SQL Server 中,以双哈希为前缀的表名是 global temp tables,在 any 用户连接期间创建,并在 所有 用户断开连接时删除.您或任何用户是否在并发实例期间运行 R 代码之前创建了此
##TempTable? -
是的,在我的例子中,全局临时表是在调用 R 脚本执行之前创建的。另外,我可以通过调用 sqlQuery() 函数来更新这个表,但是 sqlUpdate() 或 sqlSave() 函数执行失败。
标签: sql sql-server r rodbc