【问题标题】:Portable SQL that works in SQL Server, mySQL and postgreSQL适用于 SQL Server、mySQL 和 postgreSQL 的可移植 SQL
【发布时间】:2009-12-03 13:04:46
【问题描述】:

我想知道是否有编写与 SQL Server、mySQL 和 postgreSQL 兼容的 SQL 代码的指南。我正在编写一个程序,用户可以选择后端数据库。为每个数据库创建单独的查询对我来说真的很困难。我不想使用 ORM 或类似的东西。

感谢您的宝贵时间。

【问题讨论】:

  • 我担心的是,如果您不认为 MS 存储过程语法可以移植到很多其他方面,您将失去很多优化收益(或优化机会!)!

标签: mysql sql-server tsql postgresql


【解决方案1】:

嗯,您可以选择的最佳途径是采用 SQL ISO 标准。

Postgres 和 MySQL 是大力支持者,但我不知道您是否可以对 SQL Server 这么说。

无论如何,我认为 ORM 解决方案可能最适合您,因为它们通常可以很好地抽象出这些差异。

但是,如果您不想使用它,您始终可以将查询存储在不同的存储库中,每个存储库用于特定的数据库并在运行时加载它们。

【讨论】:

  • 只是对其他人的澄清:SQL 的 ISO 标准不是各种专有 SQL 中公共元素的“交集”。这是他们应该的样子,而不是他们的样子。没有 DBMS 实现了所有 ISO SQL,而且我见过的每个 DBMS 都至少有一些非 ISO 扩展。如果情况是所有 SQL 特性空间中的维恩图,每个 SQL 方言/标准都作为一个圆圈,那么任何圆圈都不会完全适合任何其他圆圈。
【解决方案2】:

遵循 SQL:2003 标准。

将代码从一个系统移植到另一个系统时进行单元测试。

如果不了解函数在 dbms 中的实现方式以及它们接受的参数,请不要使用函数。

注意事项:一些 SUBSTRING 函数在一个系统中是基于 0 的,而在另一个系统中是基于 1 的。 DATEDIFF 的工作方式也不同。有些 dbms 对 datetime 数据类型有微秒,有些则没有。

话虽如此,编写真正可移植的 SQL 是一个梦想……但真正可移植真的很重要吗?一个熟练的 DBA 应该很快就知道其中的细微差别并移植 SQL 代码。

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多