Ove*_*ack 5 sql sql-server ansi-sql
有没有办法可以强制我的 sql server 数据库只使用符合 SQL 的代码?
通过这种方式,SQL 代码可以轻松传输到其他数据库系统,如 Oracle、IBM 和其他符合 ANSI 标准的系统。
或者其他可行的方法来获得相同的结果?
不,不是真的。
但是,它并没有真正产生太大的不同 - 您可以在广泛不同的 SQL 引擎中使用相同的(ANSI 或其他)SQL 的想法只是一种幻觉。现在通常的方法是使用为您构建查询的人 - 至少允许在发送 SQL 之前进行一些优化。如果这很重要,您甚至可以拥有不同的数据库结构。
甚至数据类型及其表示在不同的数据库客户端之间也可能不同。例如,现在我正在开发一个使用 DataSet 的旧 Oracle 应用程序。在 Oracle 上,所有numbers 都是decimalC#中的s。在 MS SQL 上,有些是decimals,有些是ints。即使使用纯粹的 ANSI SQL,您也需要处理这样的微小不兼容性,并且也很难追求性能。
例如,遗留应用程序中的一些 Oracle 查询使用显式索引 - 由于查询的构建和形成方式(糟糕),这确实是必要的,但仅限于 Oracle - MS SQL 似乎根本不需要它们。MS SQL 执行计划器比 Oracle 更好地处理 SQL,反之亦然 - 一些性能关键查询在两个引擎上看起来完全不同。如果我可以为每个数据库结构提供不同的数据库结构,这将对性能有很大帮助。并且还有不同的开发范式 - Oracle 代码在插入之前请求 ID(等),而 MS SQL 的标准是让数据库引擎处理 - 您只需确保代码端的关联正确转换为数据库端的关系字段。
这只是两个主要的数据库引擎。MySQL、Postgres、DB2……即使在全 ANSI 模式下,它们都有微小的怪癖。此外,ANSI 标准甚至都没有在其中任何一个中完全实施,而且泡沫很容易破灭。
即使使用中间体(如某些 O/RM 系统)也会暴露大量泄漏。关键是尽可能远离任何特定的东西 - 并确保每个人都清楚你无法跟上游戏的地方。