将SQL Server数据库设置为仅允许ANSI兼容的SQL代码

时间:2015-02-24 10:08:14

标签: sql sql-server ansi-sql

有没有办法可以强制我的sql server数据库只使用SQL兼容代码?

通过这种方式,SQL代码可以轻松传输到其他数据库系统,如Oracle,IBM和其他符合ANSI标准的系统。

或其他可行的方法来获得相同的结果?

1 个答案:

答案 0 :(得分:4)

不,不是真的。

然而,它并没有太大的区别 - 你可以在广泛使用不同的SQL引擎中使用相同的(ANSI或其他)SQL的想法只是一种幻觉。现在通常的方法是使用为您构建查询的人 - 至少在发送SQL之前允许一些优化。如果这很重要,您甚至可以拥有不同的数据库结构。

即使数据类型及其表示形式在不同的数据库客户端之间也可能不同。例如,现在,我正在研究使用DataSet的旧版Oracle应用程序。在Oracle上,所有number都是C#中的decimal。在MS SQL上,有些是decimal,有些是int。即使使用纯粹的ANSI SQL,您也需要处理这样的微不兼容性,并且很难追逐性能。

例如,遗留应用程序中的一些Oracle查询使用显式索引 - 由于构建和形成查询的(错误)方式,它确实是必要的,但仅在Oracle上 - MS SQL似乎不需要它们所有。 MS SQL执行计划程序比Oracle更好地处理SQL,反之亦然 - 一些性能关键查询在两个引擎上看起来完全不同。如果我可以为每个人提供不同的数据库结构,它将有助于提高性能 。并且还有不同的开发范例 - Oracle代码在插入之前请求ID(等等),而MS SQL上的标准是让数据库引擎处理 - 您只需确保代码端的关联正确转换为数据库端的关系字段。

这只是两个主要的数据库引擎。 MySQL,Postgres,DB2 ......所有这些都有微小的怪癖,即使在完全ANSI模式下也是如此。除此之外,ANSI标准甚至没有在任何中完全实现,而且泡沫很容易爆发。

即使使用中间体(如某些O / RM系统)也会暴露大量泄漏。关键是尽可能远离任何具体的东西 - 并确保每个人都清楚你无法跟上这些游戏的地方。