【问题标题】:Is there a way to make SQL standard compliant queries using Visual Studio?有没有办法使用 Visual Studio 进行符合 SQL 标准的查询?
【发布时间】:2019-12-07 08:06:32
【问题描述】:

我只是想知道是否有适用于 Visual Studio 2019 Professional 的 SQL 标准合规性验证器(可以设置为 strict:只接受绝对合规的语法)。如果它也支持本地语言会很好,但我已经习惯了那种 CLR-only 的东西(我真的不知道为什么可能是因为链接......我可能是完全错误的,虽然......我实际上不知道并猜测了)。

重要的是它需要符合标准,而不仅仅是符合 SQL 服务器。标准中没有的就是错误。

目标是制作完全独立于 DBMS 的 SQL 代码。感谢您花时间阅读我的问题。

【问题讨论】:

  • “我们的目标是让 SQL 代码完全独立于 DBMS”,这几乎是不可能实现的。不同的 DBMS 在执行相同的查询时可能表现不同。
  • 首先使用 https://en.wikipedia.org/wiki/SQL_compliance 中列出的核心 SQL 功能。您还可以使用developer.mimer.com/sql-2016-validator 来验证语法。常见问题是不同的日期/时间和字符串函数。

标签: sql .net visual-studio sql-standards


【解决方案1】:

目标是制作完全独立于 DBMS 的 SQL 代码。

不可能的目标,除非您完全放弃编写 SQL。这也许很可悲,但不同的数据库在非常基本的事情上有所不同,挑选和选择他们想要的标准部分。令人高兴的是,SELECTJOINGROUP BY 这样的主要内容很常见,但细节并不常见。

您可以将它们想象为随着时间和地区变化的口语方言。我最熟悉英语,但确实所有语言都在发展和变化。我可以阅读莎士比亚英语,但我不会那样的英语。在某些情况下会出现语法错误,请使用未知词,以及常用词的替代含义。

以下只是一些在数据库中存在很大差异的功能示例:

  1. 间隔。使用标准语法为日期添加间隔是interval + '1 day'。这因数据库而异。
  2. 部分数据库不支持FULL JOIN
  3. 某些数据库不支持递归 CTE。有些使用recursive 关键字;有些没有。
  4. 某些数据库不支持FROM 子句中的VALUES() 构造函数。
  5. 一些数据库允许FROM 子句是可选的。
  6. 该标准具有漂亮的功能,例如 FILTER 和按功能相关的 id 进行聚合。很少有数据库支持
  7. 数据类型的限制差异很大 - 例如,较长的字符串是什么。
  8. 标准使用FETCH 限制结果,某些数据库不支持。
  9. 将字符串解析为日期并将日期格式化为字符串完全依赖于数据库。
  10. 提取日期/时间组件在标准中使用extract(),但实际上很少有数据库支持该功能。

这些只是我脑海中的一些差异 - 绝不是完整的,甚至不是最重要的。我只想指出,你想做的事情是不可能的。

【讨论】:

  • 太遗憾了,像 SQL 这样非常重要的标准竟然受到如此虐待,以至于实际上不可能编写出可在所有数据库中运行的 100% 兼容的代码。即使 DBMS 有更好的做事方式,它也应该实施标准,并建议客户在他们想要更好的性能或他们提供的任何权衡时应该使用他们的方言。
猜你喜欢
  • 2019-12-25
  • 1970-01-01
  • 2011-03-29
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多