【问题标题】:How do I run a SQL update statement in RODBC?如何在 RODBC 中运行 SQL 更新语句?
【发布时间】:2017-09-07 19:28:17
【问题描述】:

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

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

如何使用 R 运行直接更新语句?

【问题讨论】:

标签: r rodbc


【解决方案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 语句,它就会运行。如果我不想返回整个内容,我还可以添加一个“inserted.columnname”。

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

此方法的另一个优点是您可以找出结果集中发生了什么变化。

【讨论】:

  • THX,为我解决问题节省了很多时间。我通常使用存储过程来更新数据,并且可以通过EXEC 中的sqlQuery 调用SP。另一种方法是使用新的基于 DBI 的包 odbc(名称中没有“R”!)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
相关资源
最近更新 更多