在服务器上执行之前处理SQL语句

时间:2014-12-05 16:34:52

标签: sql sql-server sql-server-2008-r2 sql-server-2000

我们的数据库位于SQL Server 2000上。我们正在迁移到SQL Server 2008 R2。

我们希望将兼容级别更新为100。

但该兼容级别不再支持加入运算符*==*

建议的解决方案是更新我们的源代码并将运算符更改为OUTER JOIN

但是我们无法承受千万次exe和dll的修改。所以我们无法更新我们的源代码;项目太多了。

我的问题是:

SQL Server 2008 R2中是否有任何系统允许我:

  1. 在执行之前捕获SQL语句
  2. 更新语句(例如,将*=替换为LEFT OUTER JOIN
  3. 将修改后的语句返回给SQL Server引擎执行
  4. 即使我们的程序仍使用旧语法

    ,此方法也允许我们将兼容级别设置为100

    由于

    (P.S。此问题已在dba.stackexchange

    上交叉发布

1 个答案:

答案 0 :(得分:1)

没有。这将需要两件不存在的东西:

  1. 类似于INSTEAD OF SELECT触发器的东西

  2. 1000个可计费小时(或更多,取决于您和/或您的团队在质量保证方面的表现如何)来提出捕获所有允许的语法变体所需的文本解析/正则表达式/等查询:在值中间阻止注释,在末尾阻止内联注释,将条件分成多行,表别名,内连接表的外连接等等。

  3. 您实际上会花费更少时间来更新您的源代码(正如其他人所建议的那样),甚至跨越“千位exe和dll”,而不是尝试实现这一点,然后花费其余的时间生活调试它,并采取支持调用问题最终导致由此中的错误引起。

    (P.S。这个答案已在DBA.StackExchange上交叉发布,但有更多细节)

    <强>更新

    我为此功能提交了Microsoft Connect建议:Intercept query batch from client to rewrite it or cancel it