gpt4 book ai didi

sql - 普通 SQL 与方言

转载 作者:行者123 更新时间:2023-12-04 14:20:16 29 4
gpt4 key购买 nike

DBMS 供应商使用 SQL 方言特性来区分他们的产品,同时声称支持 SQL 标准。 'Nuff 说。

您编写的任何 SQL 示例是否无法转换为 SQL:2008 标准 SQL?

具体来说,我说的是 DML(查询语句),而不是 DDL,存储过程语法或任何不是纯 SQL 语句的东西。

我还讨论了您将在生产环境中使用的查询,而不是临时的查询。

1 月 13 日编辑

感谢您的所有回答:他们向我传达了一种印象,即创建了许多特定于 DBMS 的 SQL 是为了解决糟糕的关系设计问题。这使我得出结论,您可能不会想要移植大多数现有应用程序。

最佳答案

典型的差异包括细微的不同语义(例如,Oracle 在某些情况下处理 NULL 与其他 SQL 方言不同)、不同的异常处理机制、不同的类型和用于处理字符串操作、日期操作或分层查询等操作的专有方法。查询提示的语法也往往因平台而异,不同的优化器可能会对不同类型的结构感到困惑。

人们可以在大多数情况下跨数据库系统使用 ANSI SQL,并期望在数据库上获得合理的结果,而不会出现诸如丢失索引等重大调整问题。然而,在任何非平凡的应用程序中,都可能需要一些不容易移植的代码。

通常,此要求将在应用程序代码库中相当本地化 - 少数查询会导致问题。报告更有可能引发此类问题,并且执行适用于数据库管理器的通用报告查询不太可能很好地工作。有些应用程序比其他应用程序更容易引起悲伤。

因此,在一般情况下,依靠应用程序的“可移植”SQL 构造是不可能的。一个更好的策略是使用通用语句,它们可以工作,并突破到数据库特定层,这不起作用。

通用查询机制可以是尽可能使用 ANSI SQL;另一种可能的方法是使用 O/R 映射器,它可以为各种数据库平台获取驱动程序。这种类型的机制应该足以满足大多数数据库操作,但需要您执行一些特定于平台的工作,因为它已经耗尽了动力。

您可以将存储过程用作更复杂操作的抽象层,并为每个目标平台编写一组特定于平台的存储过程。可以通过 ADO.net 之类的东西访问存储过程。

在实践中,参数传递和异常处理的细微差别可能会导致这种方法出现问题。更好的方法是生成一个包装具有通用接口(interface)的特定于平台的数据库操作。根据您使用的 DBMS 平台,可以换入和换出不同的“驱动程序”模块。

关于sql - 普通 SQL 与方言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027567/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com