sqlSave出错

时间:2011-11-15 20:30:12

标签: sql-server r rodbc

我正在与sqlSave进行斗争,以添加看起来像这样的矩阵B

Noinscr
88877799
45645687
23523521
45454545

到SQL表。

所以我运行以下命令:

sqlSave(channel, b, "[testsFelix].[dbo].[TREB]", append = TRUE,
  rownames = FALSE, colnames = FALSE, safer = TRUE, fast = FALSE)

我收到以下错误:

Erreur dans sqlSave(channel, b, "[testsFelix].[dbo].[TREB]", append = TRUE,  : 
  42S01 2714 [Microsoft][SQL Server Native Client 10.0][SQL Server]
    There is already an object named 'TREB' in the database.
  [RODBC] ERROR: Could not SQLExecDirect
    'CREATE TABLE [testsFelix].[dbo].[TREB]  ("Noinscr" int)'

看到它不想删除表,即使append=TRUE存在,我也试图擦除我的SQL表并再次运行相同的代码。

我收到以下错误:

Erreur dans sqlColumns(channel, tablename) : 
  ‘[testsFelix].[dbo].[TREB]’: table not found on channel

所以我很困惑,当我想追加R说它不能,因为桌子在那里,当桌子不存在时,R说它不能把信息放在里面,因为桌子不存在。我进入SQL验证没有发生任何事情,但我看到R使用正确的列名称(Noinscr)创建了表,但表格为空。

请告诉我我做错了什么。 谢谢

5 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。我意识到默认情况下sqlSave会在' Master'中创建表。架构。我启动了ODBC数据源管理器并更改了默认数据库并选择了所需的数据库并且工作正常。

答案 1 :(得分:2)

我发现此帖子谷歌搜索类似的问题。重新启动R以及系统重新启动后问题仍然存在。我通过打开与不同数据库的新连接并使用sqlSave写入该数据库,将问题缩小到数据库。

奇怪的是,原始数据库的问题已通过使用R打开和关闭来纠正:

DBchannel <- odbcConnectAccess(access.file = "C:/myPath/Data.mdb")
odbcClose(DBchannel)

执行此操作后,以下测试工作正常:

require(RODBC)
dd <- data.frame('normal' = rnorm(100), 'uniform' = runif(100))
DBchannel <- odbcConnectAccess(access.file = "C:/myPath/Data.mdb")
sqlSave(DBchan, dd, tablename='testtable')
odbcClose(DBchannel)

(这很好,因为我的初始(非)解决方案是重建数据库)

答案 2 :(得分:0)

我和你有同样的问题。我可以调用odbcQuery来逐行插入数据。但是,我的data.frame有数十条线路。这是插入的oslow。如果您的数据集不大,您可以尝试一下。

答案 3 :(得分:-1)

请试试这个

sqlSave(channel, b, "_b", append = TRUE,
    rownames = FALSE, colnames = FALSE, safer = TRUE, fast = FALSE)

我发现Excel会添加一个&#34; _&#34;在默认文件名前面,如果将其添加到文件名中,Excel将找到该表。

答案 4 :(得分:-1)

你必须删除括号([]),然后它应该运行正常。