【问题标题】:Tool to convert queries with Non-ANSI syntax to ANSI syntax in SQL Sever 2008 R2在 SQL Server 2008 R2 中将具有非 ANSI 语法的查询转换为 ANSI 语法的工具
【发布时间】:2017-08-09 15:38:41
【问题描述】:

作为背景,我们的系统使用SQL 2000 工作,并使用Non-ANSI 语法来编写查询。当我们迁移到SQL 2008 R2 时,我们将"= * " and " * =" 修改为RIGHT 以及LEFT joins。但现在我们计划迁移到SQL 2016。逗号连接已弃用。我们也可以在这个版本中使用逗号连接,但Microsoft 建议这样会影响查询的性能。此外,我们不知道 SQL Server 会将这些Non-ANSI 组件的支持扩展到多长时间。

现在我们正在寻找一种工具(Microsoft 或第三方),它可以扫描存储过程,并且能够更改 Non-ANSI 语法,如 ',' 并将其替换为 @ 987654335@ 或JOIN

到目前为止,我已经尝试过

Toad for Oracle https://www.toadworld.com/products/toad-for-oracle/f/10/t/9518

并注意到它没有给出正确的输出。

还使用了其他几个工具,它们都没有达到目的。

http://www.dpriver.com/blog/list-of-demos-illustrate-how-to-use-general-sql-parser/rewrite-oracle-propriety-joins-to-ansi-sql-compliant-joins/

http://info.swissql.com/products/sqlone-apijava/sqlone-apijava.html

如果遇到类似情况的任何人都可以对此有所了解,那将会很有帮助。任何帮助将不胜感激。

【问题讨论】:

  • 您可以将FROM 子句中的逗号替换为CROSS JOIN
  • 您可以在 Sql Server 管理工作室中使用 Ctrl+Shift+Q 来生成 ansi 标准查询。但不确定所有查询

标签: sql tsql sql-server-2008-r2 sql-server-2016


【解决方案1】:

坦率地说,我认为我不会相信任何工具可以在任何事情上做到这一点,除了单个连接。您将需要运行旧代码和新代码,并确保获得相同的结果。

我的建议是,您可以通过识别当前环境中耗时最长的查询来定位要修复的查询(如果它们在您所处环境中真正长时间运行,则可以查看一些性能调整)和那些查询运行最频繁。由于 2016 版本将允许您使用已弃用的语法,因此通过首先修复最关键的语法,您将避免最严重的潜在性能问题。我建议获取前 10 个运行时间最长的查询和前 10 个最常用的查询,修复它们,然后转到每个类别的下 10 个。

最关键的是训练您的开发人员不再使用这种语法。此外,您还可以让他们修复他们需要为维护或错误而触及的任何查询,并通过 100% 的代码审查来强制执行。

【讨论】:

  • 谢谢。但我相信有几种方法可以实现这一目标。到目前为止,市场上还没有支持将存储过程从一个版本迁移到另一个版本的工具。但是有像 TOAD 和 SWISSQL 这样的工具可以帮助将语法转换为 Oracle。因此,一种方法是先将过程转换为 Oracle,然后再将它们转换回 SQL Server。我从来没有试过这个。所以不知道这是否可行:)
猜你喜欢
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多