如何在RODBC中运行SQL更新语句?

时间:2017-09-07 19:28:17

标签: r rodbc

尝试在RODBC中使用带有sqlQuery函数的SQL语句运行更新时,会出现错误

" [RODBC]错误:无法SQLExecDirect'。

如何使用R?

运行直接更新语句

1 个答案:

答案 0 :(得分:1)

您不能将纯SQL更新语句与SQL查询函数一起使用,只需返回结果集即可。例如,以下声明不起作用:

sql="update mytable set column=value where column=value"
cn <-odbcDriverConnect(connection="yourconnectionstring")
resultset <- sqlQuery(cn,sql)

但是如果你添加一个输出语句,SQL查询函数将正常工作。例如。

sql="update mytable set column=value output inserted.column where column=value"
cn <-odbcDriverConnect(connection="yourconnectionstring")
resultset <- sqlQuery(cn,sql)

我刚添加了一个函数,可以轻松获取原始sql并快速将其转换为更新语句。

  setUpdateSql <-function(updatesql, wheresql, output="inserted.*"){
   sql=paste(updatesql," output ",output, wheresql)
   sql=gsub("\n"," ",sql) #remove new lines if they appear in sql
   return(sql)

}

所以现在我只需要拆分SQL语句就可以了。我还可以添加一个&#34; inserted.columnname&#34;如果我不想归还整件事。

sql=setUpdateSql("update mytable set column=value","where column=value","inserted.column")#last parameter is optional
cn <-odbcDriverConnect(connection="yourconnectionstring")
resultset <- sqlQuery(cn,sql)

此方法的另一个优点是您可以找出结果集中发生了哪些更改。