如何使用R中的函数sqlSave()将数据附加到具有IDENTITY主键的SQL Server表中?

时间:2017-11-13 20:35:29

标签: sql-server r rodbc

我在SQL Server中创建了一个表,如下所示:

CREATE TABLE testPK 
(
    ID INT NOT NULL IDENTITY (1, 1) PRIMARY KEY,
    NumVal NUMERIC (18, 4)
)

现在我想使用RODBC函数sqlSave()从R程序向testPK追加数据,如下所示:

# Specify data to append
test.dt <- data.table(NumVal = 1.0)

# Assign connection
myconn <- odbcDriverConnect(connectionString)

# Append test.dt to SQL table testPK
sqlSave(channel = myconn, dat = test.dt, tablename = 'testPK',
        rownames = FALSE, append = TRUE)

# Close connection
odbcCloseAll()

但是,这会返回错误消息

Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  : 
  missing columns in 'data'

我没有在数据表中为列ID提供值,因为我假设我的SQL表的该列上的IDENTITY规范导致SQL Server在追加新记录时生成唯一值。如何从R?

获得这个结果

同样的问题已经发布here,但没有公认的解决方案。

1 个答案:

答案 0 :(得分:1)

我无法使用# Specify data to append test.dt <- data.table(NumVal = 1.0) # Assign connection myconn <- odbcDriverConnect(connectionString) # Concatenate the VALUES portion of the query values <- paste("(", test.dt$NumVal, ")", sep = "", collapse = ",") # Create the full query testQuery <- paste("INSERT INTO testPK (NumVal) VALUES", values) # Append test.dt to SQL table testPK sqlQuery(channel = myconn, query = testQuery) # Close connection odbcCloseAll() 找到解决方案,因此我使用概述here的方法将任意数量的列附加到SQL表。对于我的单列数据表,以下代码实现了所需的结果:

{{1}}