使用 odbc::d bWriteTable() 函数写入预期的数据库位置

Write to intended DB location with odbc::dbWriteTable() function

提问人:Hack-R 提问时间:1/16/2019 最后编辑:Hack-R 更新时间:1/17/2019 访问量:427

问:

库中存在类似错误的现象,多年来一直是较旧、较慢的库的已知问题,但是 的解决方法似乎不适用于 .odbcRODBCRODBCodbc

问题:

很多时候,人们可能希望从二维 R 对象创建 SQL 表。在本例中,我使用 SQL Server(即 T-SQL)执行此操作。用于身份验证的帐户(例如“”)可能与将包含正在创建的表的数据库的所有者和创建者不同,但该帐户对目标数据库具有完全读/写权限。sysadmin-account

这样做的调用是这样的,并且“成功”运行odbc()

library(odbc)

db01 <- odbc::dbConnect(odbc::odbc(), "UserDB_odbc_name")
odbc::dbWriteTable(db01, "UserDB.dbo.my_table", r_data)

这将连接并创建一个表,但不是UserDB.dbo.my_table 的预期位置创建表,而是在 UserDB.sysadmin-account.dbo.my_table 中创建表。

从技术上讲,是数据库的子级。这样做的目的是创建一个新的子对象,该子对象具有自己的子对象,然后在其中创建表。.dboUserDBUserDBsysadmin-account.dbo

对于其他一些库/语言,我们发现一种解决方法是在调用中将对目标表位置的引用更改为“”,或者在某些情况下更改为“”。此外,我认为运行查询有时用于帮助.RODBC.dbo.my_table..dbo.my_tableuse UserDBRODBC

这些解决方案似乎都对 没有任何影响。odbc()

更新

  • 尝试将该库作为潜在的替代品,但无济于事DBI
  • 找到了将数据发送到全局临时表,然后使用 SQL 语句从临时表复制到预期位置的解决方法
r sql-server odbc

评论

1赞 Mako212 1/16/2019
哎呀,没有意识到贬值了,这听起来像是正确的方法。RSQLServerodbc()
0赞 Mako212 1/16/2019
不过,我会尝试用于连接library(DBI)
0赞 Hack-R 1/16/2019
@Mako212我可以尝试一下。我们从切换到 RStudio 的库是由于速度的提高。我认为也很快,但如果它解决了我们遇到的问题,也需要确认它作为解决方案来验证它。谢谢!odbcRODBCDBIodbc
0赞 Mako212 1/16/2019
您可能还需要指定 in ,否则它可能会在目标数据库之外连接您。databasedbConnect
0赞 Mako212 1/16/2019
下面是 R Studio 中的示例连接字符串:con <- dbConnect(odbc(), Driver = "SQLServer", Server = "mysqlhost", Database = "mydbname", UID = "myuser", PWD = "password", Port = 1433)

答: 暂无答案