RODBC错误 - 无法为标识列插入显式值

时间:2015-04-23 20:14:02

标签: sql r rodbc

我尝试使用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] Update中的exec失败 23000 544 [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无法在表&#39; Employees&#39;中为标识列插入显式值。当IDENTITY_INSERT设置为OFF时。

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

1 个答案:

答案 0 :(得分:2)

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

  1. 打开Identity_Insert

    sqlQuery(myconn,“Set Identity_Insert Employees On”,errors = TRUE)

  2. 执行sqlSave查询。这里的问题是你需要手动插入ID,这意味着你要负责验证它们的唯一性和顺序性。在我的情况下,我知道在插入之前我的表格将为空,因此我可以将rownamesaddPK设置为TRUE。

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

  3. 将Identity_Insert关闭

    sqlQuery(myconn,“Set Identity_Insert Employees Off”,errors = TRUE)