4

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

微软 SQL -SELECT TOP 1 * FROM MyTable ORDER BY DateCreated DESC

mysql -SELECT * FROM MyTable ORDER BY DateCreated DESC LIMIT 1

是否有任何标准方法可以为各种供应商抽象语句创建?任何在线资源或书籍讨论这个问题?有什么我觉得有用的提示或 smart-alec 评论吗?

更多信息:我正在用在 Windows 服务器上运行的 vanilla ASP 编写我们的应用程序。

谢谢,斯帕拉

4

3 回答 3

4

您可以符合 ANSI SQL 92。我知道的所有主要 RDBMS 都会支持它。

但是,各个 RDBMS 制造商添加了大量的东西来增强他们自己的 SQL 风格。那就是你陷入困境的地方。

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

更好的选择是为每个受支持的 RDBMS 创建一个 DAL。跨 DAL 实现 DAL 接口以使它们统一。这应该比切换代码更容易。

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

于 2010-04-15T14:44:25.583 回答
2

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

编辑:经典 ASP 有 OR/M 吗?

于 2010-04-15T15:00:31.490 回答
0

你知道,我敢打赌你可以通过严格的 ansi sql 来解决问题,它只需要一些努力,可能还需要额外的工作。IE

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

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

于 2010-04-16T01:11:34.897 回答