【问题标题】:ROSBC save data into SQL serverROSBC 将数据保存到 SQL 服务器
【发布时间】:2014-05-24 13:27:31
【问题描述】:

我正在尝试使用 rodbc 将数据框插入到 Microsoft SQL 服务器中的现有(空)数据表中。以下代码在 sqlSave 阶段失败:

# connect to SQL server
require(RODBC)
close(ch)
ch <- odbcConnect(dsn=...)

# list tables available in database
sqlTables(ch, schema = "dbo")

# get info on table structure
tmp <- sqlColumns(ch, "Currency")
varT <- as.character(tmp$TYPE_NAME)
names(varT) <- as.character(tmp$COLUMN_NAME) 

# this does not work
sqlSave(ch, df, tablename = "Currency", append = TRUE, rownames = FALSE, 
    varTypes=varT, verbose = TRUE, test = FALSE, nastring = NULL,  fast = TRUE) 

我收到以下错误:

Error in sqlSave(ch, df, tablename = "Currency", append = TRUE, rownames = FALSE,  : unable to append to table ‘Currency’

这是完整的错误信息:

sqlSave(ch, df, tablename = "Currency", append = TRUE, rownames = FALSE, + varTypes=varT, 详细 = TRUE, test = FALSE, nastring = NULL, fast = TRUE) 查询:INSERT INTO "Currency" ("CurrencyID", "Currency", "CountryID", "InvertSpot") VALUES (?,?,?,?) 绑定:“CurrencyID”数据类型 4,ColSize 10 绑定:“货币”数据类型 -8,ColSize 3 绑定:“CountryID”数据类型 4、ColSize 10 绑定:“InvertSpot”数据类型 4,ColSize 10 参数: 编号:1:CurrencyID 2//编号:2:货币 ARS//编号:3:CountryID 1//编号:4:InvertSpot 0 // sqlwrite 返回 [RODBC] 更新中执行失败 23000 547 [Microsoft][ODBC SQL Server Driver][SQL Server]INSERT 语句与 FOREIGN KEY 约束“FK_Currency_Country”冲突。冲突发生在数据库“GlobalMacro”、表“dbo.Country”、列“CountryID”中。 01000 3621 [Microsoft][ODBC SQL Server Driver][SQL Server]语句已终止。查询:删除表“货币” sqlSave 中的错误(ch,df,tablename = "Currency",append = TRUE,rownames = FALSE,: 无法附加到表“货币”

关于如何解决此问题的任何建议?谢谢

【问题讨论】:

  • 我假设您已经检查过您确实有权访问它?如果没有数据集,我们很难复制 ;)。
  • 正确 - 我可以写入服务器并使用 sqlSave 创建一个新表。我似乎无法填充现有表

标签: sql r append rodbc


【解决方案1】:

嗯,这就是你的问题,隐藏在扩展的错误消息中 - “INSERT 语句与 FOREIGN KEY 约束“FK_Currency_Country”冲突。换句话说,Currency_Country 是一个外键 - 你的表从另一个表中引用的东西。因此,尝试覆盖它会导致您的查询出错,因为外键不能包含 table2(您将其用作外键)中不在 table1 中的数据(它实际上包含在其中)。

您需要 (a) 停止使用外键或 (b) 将此数据合并到外键所源自的表中,然后再尝试将其插入此处。

【讨论】:

  • 没问题!很高兴帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2012-02-16
  • 2011-09-27
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
相关资源
最近更新 更多