sql - 无法使用 R 中的 sqlSave 附加到 SQL Server 表

标签 sql sql-server r odbc rodbc

我正在尝试使用 R 中 RODBC 包的 sqlSave 函数更新 SQL 表。 数据存在于数据框中。 当我尝试运行命令时:

sqlSave(DBConn, dat=df, verbose=T, tablename='table', append=T)

我收到以下错误:

Query: INSERT INTO "table" ( "col1", "col2", "col3", "col4" ) VALUES ( ?,?,?,?,? )
sqlwrite returned
42000 -131 [Sybase][ODBC Driver][Sybase IQ]Syntax error near 'table' on line 1
[RODBC] ERROR: Could not SQLPrepare 'INSERT INTO "table" ( "col1", "col2", "col3", "col4" ) VALUES ( ?,?,?,?,? )'

我在这里做错了什么,导致我无法获取 SQLQuery 中的值?

感谢您提前提供的帮助

编辑 1 @Gordon 评论后:

错误显示 5 个占位符,但我的 data.frame 只有 4 列。我执行了 dim(df) 并得到了 4。它与 df 的行索引有某种关系吗?

编辑2

执行以下操作:

sqlSave(DBConn, dat=df, verbose=T, tablename='table', append=T)

现在我得到的错误仍然与 4 个占位符相同,但所有值仍然是 (?,?,?,?)

编辑3

我也尝试使用 sqlUpdate

sqlUpdate(DBConn, dat=df, verbose=T, tablename='table')

我现在得到的错误是:

Query: UPDATE "table" SET "col2"=?, "col3"=?, "col4"=? WHERE "col1"=?
Error in sqlUpdate(DBConn, t, tablename = "table", verbose = T) :
  42000 -131 [Sybase][ODBC Driver][Sybase IQ]Syntax error near 'table' on line 1[RODBC] ERROR: Could not SQLPrepare 'UPDATE "table" SET "col2"=?, "col3"=?, "col4"=? WHERE "col1"=?'

最佳答案

数据类型和列名称可能存在问题。 所以最好获取表的数据类型和列名并将其分配给数据框。

ColumnsOfTable       <- sqlColumns(conn, tablename)
varTypes             <- as.character(ColumnsOfTable$TYPE_NAME) 
names(varTypes)      <- as.character(ColumnsOfTable$COLUMN_NAME) 
colnames(dataObject) <- as.character(ColumnsOfTable$COLUMN_NAME)

sqlSave(conn, dataObject, tableNames, fast=TRUE,append=TRUE,  rownames=FALSE, varTypes=varTypes )

关于sql - 无法使用 R 中的 sqlSave 附加到 SQL Server 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240553/

相关文章:

mysql - MySQL 中莫名其妙的缓慢查询

mysql - 当 SQL 中列中的值不明确时,如何使用 where 子句?

r - 如何最大限度地利用 R 中的 Tensorflow 2.0(使用 Keras 库)的 GPU 使用率?

r - 为矩阵向量化 min()

r - 将 mutate_at 与嵌套的 ifelse 一起使用

sql - 如何编写 SQL 查询以显示过去 30 天内在 Wordpress 网站中最常用的标签列表

sql-server - SQL Server 2005 数字精度损失

sql - 有趣的 SQL 谜题

sql - 如何在三个不同的表中并行插入数据

mysql - mysql中一组行的累计和