加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

有没有像便携式SQL这样的东西?

发布时间:2020-12-12 08:47:17 所属栏目:MsSql教程 来源:网络整理
导读:根据我的经验,即使有一个SQL标准,很难编写可以通过大量RDBMS工作的SQL. 因此,我想知道是否有一个已知可用于所有主要RDBMS的SQL(包括DDL,模式等)的子集,包括PostgreSQL,MySQL,SQL Server以及最后但并非最不重要的Oracle.编写可移植SQL时应避免什么样的陷阱?
根据我的经验,即使有一个SQL标准,很难编写可以通过大量RDBMS工作的SQL.

因此,我想知道是否有一个已知可用于所有主要RDBMS的SQL(包括DDL,模式等)的子集,包括PostgreSQL,MySQL,SQL Server以及最后但并非最不重要的Oracle.编写可移植SQL时应避免什么样的陷阱?

顺便提一句,是否有一个项目的目标是将有效的SQL子集翻译成所有这些供应商使用的特定方言?我知道Hibernate和其他ORM系统必须这样做,但是我不想要ORM,我想要写直接到数据库的SQL.

谢谢!

解决方法

问题是一些DBMS甚至忽略最简单的标准(例如,引用字符或字符串连接).

因此,以下(100%ANSI SQL)不会在每个DBMS上运行:

UPDATE some_table
    SET some_column = some_column || '_more_data';

而且我甚至没有考虑更高级的SQL标准,比如递归的普通表表达式(即使那些支持它的表达式并不总是符合)或者窗口函数(一些仅实现非常窄的子集,有些不支持所有选项).

关于DDL,数据类型有问题. DATE不尽相同,就像TIMESTAMP一样.不是每个DBMS都有一个BOOLEAN类型或TIME类型.

当涉及到约束或域名时,您会得到更多的差异.

所以简而言之:除非你真的,真的需要独立于DBMS,不用担心.

说完所有这些:如果你有专有和标准语法之间的选择,可以选择标准语法(OUTER JOIN vs()或* =,解码vs CASE,nvl对合并等等).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读