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

Rob*_*ert 5 sql-server r rodbc

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

CREATE TABLE testPK 
(
    ID INT NOT NULL IDENTITY (1, 1) PRIMARY KEY,
    NumVal NUMERIC (18, 4)
)
Run Code Online (Sandbox Code Playgroud)

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

# 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()
Run Code Online (Sandbox Code Playgroud)

但是,这将返回错误消息

Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  : 
  missing columns in 'data'
Run Code Online (Sandbox Code Playgroud)

我没有在数据表中为列ID提供值,因为我假设我的SQL表的该列上的IDENTITY规范导致SQL Server在追加新记录时生成唯一值.我怎样才能从R中获得这个结果?

这里发布同样的问题,但没有公认的解决方案.

Rob*_*ert 1

我无法找到解决方案,因此我使用了此处sqlSave()概述的方法来将任意数量的列附加到 SQL 表。以我的单列数据表为例,以下代码达到了预期的结果:

# 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()
Run Code Online (Sandbox Code Playgroud)