我正在对 Oracle 的 OPENQUERY 执行 DELETE,然后执行 INSERT。我已经尝试过使用 WHERE 进行直接删除以及使用 JOIN 进行过滤。INSERT 只是一个 INSERT OPENQUERY/SELECT。我还尝试了过滤更新,然后在新行上插入。由于我不能对 OPENQUERY 进行 MERGE,因此我必须连续执行两个语句。
删除、更新和插入按预期工作,但前提是我间隔 10 分钟运行它们。单独地,它们在不到一秒的时间内完成。当使用 sp_executesql 或 SSMS 背靠背运行时,无论是单独运行它们还是在一个脚本中运行,它们都需要 10分钟。
与 Oracle DBA 交谈,没有为他敲响任何铃声。
查询本身,尽管我想分享它们以帮助您帮助我,但我没有这样做的自由。请相信我的话,当它们分开运行 10 分钟时,它们都可以在不到一秒的时间内按预期工作,而一起运行时则需要 10 分钟。
结果证明这是 OPENQUERY 的问题以及需要 OPTION (RECOMPILE) 的相关“元数据不一致”问题。为写入查询(UPDATE、INSERT 和 DELETE)切换到 EXEC AT 解决了限制效果。