【问题标题】:RODBC Error - Cannot insert explicit value for identity columnRODBC 错误 - 无法为标识列插入显式值
【发布时间】:2015-07-02 05:28:57
【问题描述】:

我正在尝试使用 RODBC 包中的 sqlSave 方法将记录附加到现有 SQL 表中。

df <- data.frame(EmployeeID = c(NA, NA, NA), EmployeeName=c("Bob", "Sue", "Jane"))

sqlSave(myconn, dat=df, tablename = "Employees", append = TRUE, rownames = FALSE, colnames = FALSE, verbose = TRUE, safer = TRUE, 
        addPK = FALSE, typeInfo, varTypes, fast = TRUE, test = FALSE, nastring = NULL)

但是,我不断收到错误

[RODBC] 更新中执行失败 23000 544 [Microsoft][ODBC SQL Server Driver][SQL Server]当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'Employees' 中插入标识列的显式值。

我的表应该会自动创建 ID。什么给了?

【问题讨论】:

  • 您是否尝试过从 data.frame 中删除 EmployeeID 列?使用此方法,您似乎正在尝试将 NULL 值附加到 EmployeeID 列中。最好不要为追加指定这些值。
  • @MrFlick 是的,在这种情况下,我收到错误“'dimnames' [2] 的长度不等于数组范围”。 This Post 非常相似,但答案并没有真正的帮助。

标签: sql r rodbc


【解决方案1】:

添加这个答案,因为我找到了解决问题的黑客式解决方法。

  1. 打开 Identity_Insert
sqlQuery(myconn, "Set Identity_Insert Employees On", errors = TRUE)
  1. 执行 sqlSave 查询。这里的问题是您需要手动插入 ID,这意味着您负责验证它们的唯一性和顺序性。就我而言,我知道我的表格在插入之前是空的,所以我可以将 rownamesaddPK 设置为 TRUE。
sqlSave(
  myconn, 
  dat=df, 
  tablename = "Employees", 
  append = TRUE, rownames = TRUE, 
  colnames = FALSE, 
  verbose = TRUE, 
  safer = TRUE, 
  addPK = TRUE, 
  fast = TRUE, 
  test = FALSE, 
  nastring = NULL
)
  1. 关闭 Identity_Insert
sqlQuery(myconn, "Set Identity_Insert Employees Off", errors = TRUE)

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 2011-06-14
    • 1970-01-01
    • 2017-10-26
    • 2016-04-13
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多