【发布时间】: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