Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server DB引擎在SQL级别有多大的兼容性?_Sql Server_Postgresql_Firebird - Fatal编程技术网

Sql server DB引擎在SQL级别有多大的兼容性?

Sql server DB引擎在SQL级别有多大的兼容性?,sql-server,postgresql,firebird,Sql Server,Postgresql,Firebird,比方说,我希望有一个可以轻松切换后端数据库的应用程序。 我通常认为SQL Server是主要的后端,但是可以灵活地使用另一个DB引擎。Firebird和PostGreSQL似乎是(在我的维基百科短途旅行中)最常见的w/SQL服务器(而且它们是免费的) 数据库的设置、访问、查询等有多相似。。是否适用于Firebird、PostGreSQL和MS SQL Server?不幸的是,不同提供商的SQL差异很大。除了最简单的SQL之外,几乎不可能编写所有要在多个RDBMS上运行的SQL—然后您就进入了最小

比方说,我希望有一个可以轻松切换后端数据库的应用程序。
我通常认为SQL Server是主要的后端,但是可以灵活地使用另一个DB引擎。Firebird和PostGreSQL似乎是(在我的维基百科短途旅行中)最常见的w/SQL服务器(而且它们是免费的)


数据库的设置、访问、查询等有多相似。。是否适用于Firebird、PostGreSQL和MS SQL Server?

不幸的是,不同提供商的SQL差异很大。除了最简单的SQL之外,几乎不可能编写所有要在多个RDBMS上运行的SQL—然后您就进入了最小公分母领域。最好使用抽象层来处理至少与数据库的连接(包括访问、发送查询),或者使用ORM来处理SQL本身或每个SQL提供者


如果您想了解它们是如何变化的,最好的例子是自动递增ID和获取上次插入记录的ID。

我曾参与过一个项目,其中绝对需要支持多个数据库,至少包括Access、SQL Server和Oracle

所以我知道这是可以做到的。大部分DML(选择、更新、插入…)都是相同的,当然我们在所有数据库中都没有遇到太大的问题,只是偶尔会遇到麻烦。MySQL在当时是个例外,因为它的功能还不够强大

我们在DDL中发现了大多数差异,但是使用正确的体系结构(我们已经有了),解决这个问题并不困难

导致我们出现问题的唯一原因是生成唯一id—autoincrement是非标准的。幸运的是,在一个大约40个表的数据库中,只有少数地方需要唯一的ID(良好的数据库设计)。最后,我们在代码中生成唯一的ID,并处理任何冲突(事务中的所有内容)


它确实使事情变得更容易,因为我们避免了对ID字段使用自动增量,更难想到唯一的键-但从长远来看更好。

好吧,CRUD的东西应该在所有地方都是一样的,但是如果构建任何复杂的东西,您可能会希望使用触发器和存储过程,这就是兼容性变差的地方。编写一个与DBMS无关的应用程序通常意味着将大部分业务逻辑移到数据库之外,因此,在这种情况下,必须有一个三层应用程序


或者,您可以使用一些类似于抽象层的包装器库,但我还没有看到一个能够在一系列DBMS上正确完成这项工作的包装器库。当然,这也取决于您使用的编程语言。

正如其他答案所指出的那样,一旦超出基本的选择/插入内容(有时甚至在那里),DBMS就会有很大的变化

我们还必须在多个DBMS之间保持兼容性。在我看来,最好的方法通常是使用某种兼容层。我们有一个内部的DB抽象库,但有几种工具可用

特别是,查看流行的ORM(Hibernate、nHibernate等)可能会有好处。作为一种副作用,它们通常提供DB独立性。至少Hibernate还有一种特殊的查询语言,它将自动转换为您正在使用的DBMS的SQL