尝试在RODBC中使用带有sqlQuery函数的SQL语句运行更新时,会出现错误
" [RODBC]错误:无法SQLExecDirect'。
如何使用R?
运行直接更新语句答案 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)
此方法的另一个优点是您可以找出结果集中发生了哪些更改。