【问题标题】:Insert R dataframe into SQL (RODBC) - error table not found将 R 数据框插入 SQL (RODBC) - 找不到错误表
【发布时间】:2021-05-22 19:55:18
【问题描述】:

我想从 R 中删除我的整个数据框,最好使用带有 sqlSave 语句的 RODBC(不是 sqlQuery)。这是我的示例代码。

library(RODBC)
myconn <- odbcDriverConnect("some connection string")
mydf <- data.frame(col_1 = c(1,2,3), col_2 = c(2,3,4))
sqlSave(myconn, mydf, tablename = '[some_db].[some_schema].[my_table]',  append = F, rownames = F,  verbose=TRUE)
odbcClose(myconn)

执行后,我收到错误消息:

sqlColumns(channel, tablename) 中的错误: ‘my_table’: 在频道上找不到表

当我签入 SQL Server 时,出现了一个空表。

如果我再次运行相同的代码,我会收到错误消息:

sqlSave(myconn, mydf, tablename = "[some_db].[some_schema].[my_table]", 中的错误: 42S01 2714 [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]数据库中已经有一个名为“my_table”的对象。 [RODBC] 错误:无法 SQLExecDirect 'CREATE TABLE [some_db].[some_schema].[my_table] ("col_1" float, "col_2" float)'

关于如何排除故障有什么建议吗?

更新

在 SSMS 中我可以成功运行以下命令:

CREATE TABLE [some_db].[some_schema].[my_table] (
    test int
);
drop table [some_db].[some_schema].[my_table]

这里是连接字符串的详细信息:

Driver=ODBC Driver 17 for SQL Server; Server=someserveraddress; Uid=user_login; Pwd=some_password

【问题讨论】:

  • 我无法重现该问题;此代码适用于我的环境。您正在写入的 SQLServer 数据库是否可能存在权限问题?也许尝试不同的数据库或在 ODBC 连接中明确指定数据库?
  • 您想将它保存到数据库中的某个模式吗?如果直接运行SQL代码,是否有效?
  • 您在哪里指定要写入的架构?我之所以问,是因为我在尝试使用RPostgreSQL 在我们的 SQL 数据库中插入表时遇到了类似的问题。最后,我使用dbWriteTable 将表写入[some_db],然后使用SQL 查询直接将其移动到[some_schema],因为没有其他方法起作用,结果证明驱动程序是问题所在。因此,我会先尝试检查它是否可以使用纯 SQL。
  • @tester dbWriteTable 这是不同的包 odbc 和 DBI 如果我没记错的话,我也会试试。
  • 我明白了。但是,安装只完成一次,而每次使用时查询都会变慢;-)

标签: r sql-server dataframe rodbc


【解决方案1】:

为避免该错误,您可以specify the database in the connection string:

Driver=ODBC Driver 17 for SQL Server; Server = someserveraddress; database = some_db; Uid = user_login; Pwd = some_password

和avoid using brackets:

sqlSave(myconn, mydf, tablename = 'some_schema.my_table',  append = F, rownames = F,  verbose=TRUE)

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 2013-01-08
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多