Я пытаюсь вставить данные из R в таблицу SQL. С этой целью я написал следующую функцию, которая создает оператор INSERT:R: Вставка данных в существующую базу данных SQL. Случайно опуская данные?
CreateInsert <- function(Dataframe, TableName){
Output=character()
ColumnNames="("
Values=colnames(Dataframe)
for (i in 1:ncol(Dataframe)) {
ColumnNames=paste(ColumnNames, Values[i], ",",sep="")
}
ColumnNames=substr(ColumnNames, 1, nchar(ColumnNames)-1)
ColumnNames=paste(ColumnNames, ")",sep="")
TableEtc=paste("INSERT INTO", TableName, ColumnNames)
do.call("sprintf", c(paste(TableEtc, "VALUES ('%s', '%s', '%s', '%s', '%s', '%s');"), Dataframe))
}
Впоследствии я выполнить это заявление после быстрой проверки для NA:
InsertQuery=CreateInsert(SelData, "TableName")
InsertQuery=gsub("'NA'", "NULL", InsertQuery) # Regular Expression
sqlQuery(DBconn, paste(InsertQuery, sep="", collapse=""))
Однако случайно опускает строку. Например, я храню корреляционную матрицу (расплавленную в длинную матрицу). Я на 100% уверен, что данные завершены, но при их хранении и случайном опросе результатов некоторые моменты отсутствуют. Любая идея, почему это происходит? Чем больше количество строк вставки, тем вероятнее это происходит. Хотя ударить даже бывает, когда я вставляю одну строку тысячи раз (цикл).
FYI: Я также попытался использовать sqlSave
sqlSave(DBconn, SelData, tablename='TABLENAME', append=TRUE, rownames=FALSE, safer=TRUE)
Но это просто дает мне ошибку «не удалось добавить в таблицу» и я менее склонен использовать его, поскольку он может также создать таблицу, если один случайно ошибается. Создание таблиц, которые я не хотел бы выполнять пользователем в R.
Спасибо!
попробуйте использовать 'verbose = TRUE' с sqlSave –
Спасибо! Это действительно объясняет sqlSave: невозможно вставить явное значение для столбца идентификатора в таблице «CorrelationTable», если для параметра IDENTITY_INSERT установлено значение OFF. Проблема с полем auto_increment, из которых я прочитал ответы, может быть заполнена NA (которая тогда будет пропущена), что я сделал, но, видимо, это не сработало! – Shakes