2016-05-15 70 views
3

我想更新SQL表中使用RODBC包的SQLSave函数R. 数据存在于数据框中。 当我尝试运行命令:无法追加到SQL Server表中使用SQLSave中R

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列。我确实昏暗(df)并得到4.它是否与df的行索引有关?

EDIT 2

做好以下工作:

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

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

编辑3

我试过用s qlUpdate也

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"=?' 
+2

对于一件事,您有四列和五个占位符。 –

+0

@戈登林诺夫:不错的观察。但是,dim(t)只能给出4。可以因为行inde或与之相关的东西吗? – user1465557

+0

FWIW我从来没有能够得到这个命令来正确追加现有的表;这对我来说似乎是一个错误。 – nrussell

回答

6

有数据类型和列名是一个问题的可能性。 所以最好是获取表的数据类型和列名,并将它们分配给数据框。

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) 
+1

这应该被标记为解决方案 –

相关问题