【发布时间】: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 创建一个新表。我似乎无法填充现有表