2014-12-05 45 views
0

我们的数据库位于SQL Server 2000上。我们正在迁移到SQL Server 2008 R2。在服务器上执行之前处理SQL语句

我们要更新的兼容级别为100

但连接操作*==*没有更多与兼容级别的支持。

建议的解决方案是更新我们的源代码并将操作员更改为OUTER JOIN

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

我的问题是:

有没有在SQL Server 2008 R2的任何系统,这将让我:

  1. 捕获的SQL语句是执行
  2. 更新语句(如更换前*= by LEFT OUTER JOIN
  3. 将修改后的语句返回给SQL Server引擎执行

这种方法将允许我们设置兼容级别设置为100,即使我们的方案仍然使用旧的语法

感谢

(附:这个问题一直是横贴在dba.stackexchange

+1

即使这种伎俩是可能的,我绝对建议不要这样做!我向你保证,这是一个可怕的方法,从长远来看不会有帮助。 – jazzytomato 2014-12-05 16:43:27

+0

我知道这一点。如果技巧存在,我们只会将它用于旧项目。不是新的。 – podosta 2014-12-05 16:45:47

+1

'建议的解决方案是更新我们的源代码并将操作员更改为OUTER JOINS' - 听起来像是很好的建议。它可能比尝试去做你所要求的更快,更不容易出错。 – Donal 2014-12-05 16:57:11

回答

1

号这需要不存在两件事情:

  1. 一种近乎一个INSTEAD OF触发器选择

  2. 1000个可计费小时(或更多,取决于您和/或您的团队在QA方面的表现如何),以获得文本解析/正则表达式/等所需的全部语法变体,以便捕获查询中允许的所有语法变体:block com在值中间的内容,最后的内联注释,分成多行的条件,表别名,内连接表的外连接等等。

您将实际花费时间更新你的源代码(如其他人所说),甚至跨越“千个EXE和DLL”,比你想实现这一点,然后花你的余生调试它,并接受最终导致错误导致的问题的支持调​​用。

(附注:这个答案已经交叉张贴在DBA.StackExchange,但还有更多的细节)

UPDATE

我提交了Microsoft连接建议为这种能力:Intercept query batch from client to rewrite it or cancel it