问题是http://github.com/cran/RODBC/blob/master/R/sql.R中的361行-data.frame和DB表必须具有完全相同的列数,否则将出现此错误此堆栈跟踪:
Error in dimnames(x) <- dn : length of 'dimnames' [2] not equal to array extent 3. `colnames<-`(`*tmp*`, value = c("ID", "FirstName", "LastName", "Birthday", "CreateDate")) at sql.R#3612. sqlwrite(channel, tablename, dat, verbose = verbose, fast = fast, test = test, nastring = nastring) at sql.R#2111. sqlSave(db2, results, append = TRUE, varTypes = c(Birthday = "datetime", CreateDate = "datetime"), colnames = FALSE, rownames = FALSE, fast = FALSE, verbose = TRUE)如果将ID列添加到您的ID列中,
data.frame则无法再使用
autoincID列,因此这不是解决方案(或解决方法)。
对于“相同列”的限制,一种“简单”的解决方法
RODBC::sqlSave是:
- 使用
sqlSave
新的行保存到另一个表名 - 发送
insert into ... select from ...
通孔RODBC::sqlQuery
以将新行追加到包含autoinc ID列的原始表中 - 再次删除带有新行的表格(
drop table...
)
更好的选择是使用新的
odbc程序包,该程序包也可以通过类似批量的插入来提供更好的性能,而不是
insert像单行那样发送单个语句
RODBC:
https://github.com/r-dbi/odbc
寻找功能
dbWriteTable(这是interface的实现
DBI::dbWriteTable)。



