代码之家  ›  专栏  ›  技术社区  ›  Sparafusile

供应商中立型SQL

  •  4
  • Sparafusile  · 技术社区  · 15 年前

    我目前正在为一个web应用程序开发一个项目,该项目可能安装在具有不同软件配置的多个不同服务器上。我希望通过允许用户安装各种SQL服务器,使我的应用程序尽可能灵活。问题是任何两个服务器供应商使用的SQL语法不匹配。对于一个简单的例子,下面是相同的针对ms sql和mysql的select语句:

    SQLMS SELECT TOP 1 * FROM MyTable ORDER BY DateCreated DESC

    MySQL SELECT * FROM MyTable ORDER BY DateCreated DESC LIMIT 1

    对于不同的供应商,是否有任何标准的方法来抽象语句的创建?有没有在线资源或书籍讨论这个问题?有什么我觉得有用的暗示或聪明的话吗?

    进一步的信息:我正在写我的we应用程序在一个windows服务器上运行的香草asp。

    谢谢,斯巴达

    3 回复  |  直到 15 年前
        1
  •  4
  •   Carl Manaster    15 年前

    您可以遵循ansi sql 92。我知道的所有主要RDBMS都会支持这一点。

    然而,个别rdbms制造商已经添加了很多东西来增强他们自己的sql风格。那就是你陷入困境的地方。

    您可能需要根据所连接的rdbms在代码中进行分支,并在此时生成/选择适当的sql语句。

    一个更好的选择是为每个支持的rdbms创建一个dal。在DAL上实现一个DAL接口,使它们一致。这应该比转换代码更容易。

    我建议您不要试图取悦所有人,您应该编写代码以支持您希望部署的前一两个系统,并在需要时添加对其他rdbms的支持。

        2
  •  2
  •   Community Mohan Dere    8 年前

    我建议您使用orm(linq、nhibernate等)来抽象sql方言,而不是试图编写普通的sql。

    编辑: Is there an OR/M for Classic ASP?

        3
  •  0
  •   Sean    15 年前

    你知道吗,我敢打赌你完全可以使用ansi sql,它只需要一些努力,可能还需要额外的工作。即

    SELECT MAX(*) FROM mytable ORDER BY datecreated DESC;
    

    在ansi中会有一些解决方法,因为实际上所有特定于db的构造都是缩短和/或缩短获取或描述数据的现有方式的方法。另一个选项可能是将对各种数据库的访问限制为存储过程和用户定义的函数。这样,您可以为一堆数据库编写脚本,您知道这些数据库将用于要求在应用程序工作之前运行特定于数据库的脚本。 只是个主意。

    推荐文章