如何使用 R 中的函数 sqlSave() 将数据附加到具有 IDENTITY 主键的 SQL 服务器 table?
How to append data to a SQL Server table with IDENTITY primary key using function sqlSave() in R?
我在SQL服务器中创建了一个table如下:
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()
但是,这个returns错误信息
Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
missing columns in 'data'
我没有为我的数据 table 中的列 ID 提供值,因为我假设 SQL table 的那一列上的 IDENTITY 规范导致 SQL 服务器在附加新记录时生成唯一值。我怎样才能从 R 获得这个结果?
相同的问题已发布 here,但没有公认的解决方案。
我无法使用 sqlSave()
找到解决方案,所以我使用概述的方法 here 将任意数量的列附加到 SQL table.以我的单列数据table为例,下面的代码达到了预期的效果:
# 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()
我在SQL服务器中创建了一个table如下:
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()
但是,这个returns错误信息
Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
missing columns in 'data'
我没有为我的数据 table 中的列 ID 提供值,因为我假设 SQL table 的那一列上的 IDENTITY 规范导致 SQL 服务器在附加新记录时生成唯一值。我怎样才能从 R 获得这个结果?
相同的问题已发布 here,但没有公认的解决方案。
我无法使用 sqlSave()
找到解决方案,所以我使用概述的方法 here 将任意数量的列附加到 SQL table.以我的单列数据table为例,下面的代码达到了预期的效果:
# 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()