sql - 如何将单行 R data.frame 插入 SQL Server 数据库?
问题描述
我正在努力将新的数据行附加到现有的 SQL Server 数据库中。
这些:
sqlQuery(con, paste("INSERT INTO df1 SELECT * FROM df2"))
sqlQuery(con, paste("INSERT INTO df1 SELECT * FROM ", df2))
sqlQuery(con, paste("INSERT INTO df1 SELECT * FROM ", sqldf("SELECT * FROM df2")))
都产生错误:
[1] “42S02 -1305 [Microsoft][ODBC Microsoft Access Driver] Microsoft Jet 数据库引擎找不到输入表或查询 'col_1_val'。确保它存在并且其名称拼写正确。”
[2] “[RODBC] 错误:无法 SQLExecDirect 'INSERT INTO df1 SELECT * FROM col_1_val'”
col_1_val
是第一列的值df2
走的sqlSave
路线:
sqlSave(con, df2, tablename = "df1", append = TRUE, rownames = FALSE, colnames = FALSE)
引发内存分配错误:
odbcUpdate 中的错误(通道、查询、mydata、coldata[m、]、test = test,:'Calloc' 无法分配内存(1073741824,共 1 个字节)
解决方案
假设 和 中的列的名称和顺序df1
相同df2
,这应该有效:
query <-
paste0("INSERT INTO df1 ",
"(", paste0(names(df2), collapse = ", "), ") ",
"VALUES (",
paste0(rep("?", length(df2)), collapse = ", "), ")")
library(RODBCext)
sqlExecute(con,
query,
data = df2)
mtcars
使用as时,编写的查询如下所示df1
。
"INSERT INTO df1 (mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb) VALUES ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"
这允许您生成将所有列名添加到查询中的语句,而无需手动声明它们。UsingsqlExecute
调用参数化查询。然后问号绑定到您的数据,然后作为语句的一部分执行。
推荐阅读
- jsf - f:ajax 标签执行整个表单而不是给定元素
- ios - 如何将具有关系的核心数据导出到 CSV
- react-native - 在 React-Native 当 Android 设备通过 USB 电缆断开连接时。表现出奇怪的行为
- android - OKHTTP 网络套接字库不工作?
- xml - 如何使用 VBScript 通过 ID 获取 XML 文件中的值?
- php - Symfony 2.1.11 图像数据响应在响应正文的开头添加了额外的字节
- php - 在 Symfony SwiftMailer 中翻译电子邮件的最佳实践
- r - 重现套索模拟实例1
- c# - C# ESC/POS 打印越南语
- c# - 根据另一列 SQL 格式化小数位数