【问题标题】:sqlSave error: table not foundsqlSave 错误:找不到表
【发布时间】:2014-05-28 21:47:36
【问题描述】:

我正在尝试使用以下代码将 R 数据帧保存回 sql 数据库:

    channel <- odbcConnect("db")
    sqlSave(db, new_data, '[mydb].[dbo].mytable', fast=T, rownames=F, append=TRUE)

但是,这会返回错误“在通道上找不到表”,同时会创建一个带有列名的空表。重新运行代码会返回错误“数据库中已经有一个名为 'mytable' 的对象”。这将继续循环 - 有人可以发现错误吗?

【问题讨论】:

  • 如果你贴出 head(new_data) 的结果,我大概可以告诉你哪里出了问题。
  • @wcampbell head(new_data) 返回:MemberNum x tx T.cal mx T.star hx hmx e.trans e.spend lost 1 2.910165e+12 0 0 205 8.77 52 0 0 0.0449161 39.27263 0.7983145活着 a.value e.value 1 0.2016855 0 1.763974 ........不知道如何在评论中发布它,使其更具可读性。

标签: sql r rodbc


【解决方案1】:

这是关于你的数据集的样子吗?

MemberNum  x             t.x T.cal m.x T.star h.x h.m.x e.trans e.spend       
1          2.910165e+12  0   0     205 8.77   52  0     0       0.0449161  

这个问题我已经遇到过好几次了。它与在频道上找不到表无关。根据我的经验,sqlSave 在日期和科学记数法方面存在问题。尝试将 x 转换为因子:

new_data$x = as.factor(new_data$x)

然后 sqlSave。如果这不起作用,请尝试as.numeric 甚至as.character(即使这不是您想要的格式。

【讨论】:

  • 整数同样的问题。您会认为 Integer 将是一种容易正确的数据类型。遗憾的是,这个解决方案并不适用。
【解决方案2】:

首先尝试运行sqlTables(db) 来检查数据库中的表及其正确名称。 然后,您可以使用此函数返回值作为sqlSave(...) 的输入

【讨论】:

  • 它显示表可用但 sqlSave() 说找不到对象
  • @Prafulla sqlsave 和 sqlupdate 是可怕的实现。我正在努力让它正确。
【解决方案3】:

您似乎正在尝试写入 SQL Server。如果您在 ODBC 连接中指定数据库名称,然后将该表称为“dbo.mytable”,它可能会有所帮助。

【讨论】:

    【解决方案4】:

    我可以更改驱动程序 odbc 中的连接。当您打开它时,您可以为一个数据库执行此操作,也可以为所有数据库执行此操作。当你为一个db打开它时,你不会有sqlSave()的问题。

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2013-03-23
      • 2020-11-01
      相关资源
      最近更新 更多