更新从DB读取的表时,sqlUpdate返回错误"[RODBC]更新中的exec失败"

SiK*_*iHe 6 database r rodbc sql-update

我正在创建一个表并使用RODBC将其写入数据库.没问题.

首先,我尝试更新R中的表,并在同一个R脚本中使用sqlUpdate逐行写回更新,并在初始化时使用相同的R会话.没问题.

但是,当我尝试将其拆分为两个脚本(一个用于初始化表,一个用于将其读回R,计算更新并将更新写入数据库)时,我收到以下错误(导入和更新工作正常,它是只需将其写回失败的数据库):

[RODBC] Failed exec in Update
Run Code Online (Sandbox Code Playgroud)

我用来更新的代码如下(当表在我的R会话中并且初始化和更新在同一个脚本中时有效):

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

sqlUpdate(conOut, myTable)

odbcClose(conOut)
Run Code Online (Sandbox Code Playgroud)

我是否只是遗漏了一些非常明显的东西,比如从数据库导入时表被转换为错误的格式?或者我还能做些什么才能让它发挥作用?

干杯.

SiK*_*iHe 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)
Run Code Online (Sandbox Code Playgroud)

这非常有效。

但是,我仍然想知道为什么该sqlUpdate命令不起作用......