sqlUpdate возвращает ошибку [RODBC] Ошибка выполнения при обновлении при обновлении таблицы, считанной из БД

Я создаю таблицу и записываю ее в базу данных с помощью RODBC. Нет проблем.

Сначала я попытался обновить таблицу в R и записать обновления построчно, используя sqlUpdate в том же сценарии R и в том же сеансе R, что и при его инициализации. Нет проблем.

Но когда я пытаюсь разделить это на два сценария (один для инициализации таблицы и один для чтения ее обратно в R, расчета обновлений и записи обновлений в базу данных), я получаю следующую ошибку (импорт и обновления работают нормально, это просто записывая его обратно в БД, которая терпит неудачу):

[RODBC] Failed exec in Update

Код, который я использую для обновления, следующий (который работал, когда таблица была в моем сеансе R, а инициализация и обновления были в одном скрипте):

conOut <- odbcConnect("myDB", uid = "myID", pwd = "myPwd", believeNRows = T)

sqlUpdate(conOut, myTable)

odbcClose(conOut)

Я просто упускаю что-то действительно очевидное, например, таблицу, которая преобразуется в неправильный формат при импорте из базы данных? Или есть что-то еще, что я могу сделать, чтобы заставить его работать?

Ваше здоровье.


person SiKiHe    schedule 08.06.2015    source источник


Ответы (1)


Я нашел обходной путь, хотя на самом деле он не отвечает на мой первоначальный вопрос:

Вместо использования sqlUpdate я выбираю обновленные значения из таблицы в R и использую sqlQuery с оператором обновления, в котором я устанавливаю все соответствующие записи в новые значения:

observedString <- paste("[Observed] = ", obs)
differenceString <- paste("[Difference] = ", myTable$Difference[n])
shapiroString <- paste("[pValueShapiroWilks] = ", myTable$pValueShapiroWilks[n])
...
clauseString <- paste0("rownames = '", myTable$rownames[n], "'")    

updateString <- paste0("UPDATE [myDB].[dbo].[myTable]
   SET ", 
  observedString, ", ", 
  differenceString, ", ",
  shapiroString, ", ",
  ljungBoxString, ", ",
  adfString, ", ", 
  warningString, ", ", 
  changeString, 
 " WHERE " , clauseString)

conOut <- odbcConnect("myDB", uid = "myID", pwd = "myPwd", believeNRows = T)

sqlQuery(conOut, updateString)

Это работает отлично.

Однако мне все же хотелось бы знать, почему команда sqlUpdate не работает...

person SiKiHe    schedule 09.06.2015