【问题标题】:Ensure SQL-92 on Access 2000 mdb to SQL Server under Access 2010确保 Access 2000 mdb 上的 SQL-92 到 Access 2010 下的 SQL Server
【发布时间】:2011-09-16 22:42:14
【问题描述】:

由于无法完全控制的情况,我必须开发 ACCESS 查询,这些查询将存储在 Access 2000 MDB 中,但可以在以下任何一种环境下开发:Access 2000、2002、2003、2007、2010。这些查询将访问(通过链接表)MS SQL Server DB 或 Access 2000 .MDB 文件。

过去,我们曾发现查询不兼容 ANSI-92 的问题。我们通过在工具|选项对话框的表/查询选项卡中标记复选框来解决这个问题(在 Access 2007 之前的旧版本下)。

我们在各种系统之间移动这些 Access 应用程序 .MDB,我们现在通常没有任何问题。

但是,我刚刚开发了一个查询,它适用于所有内部联接,但是当我将其中一个联接更改为外部联接时,查询失败并在 Access 2010 下出现“无效操作”错误。所以我想我会检查是否仍然设置了 ANSI-92 复选框。没找到。

现在,我知道 Access 2003 及更高版本会自动使用 ANSI 92 语法,但我想知道是否有任何方法可以检查这些查询在这种情况下(相当具体的情况)是否属于这种情况。我观察到,当我们更改复选框时,我所有的“Like”查询都变成了“Alike”查询...

所以问题归结为在这种情况下 ANSI 92 语法完全透明,而我的查询失败的原因是别的......

TIA, 保罗

【问题讨论】:

  • A2003 及更高版本不会自动使用 ANSI 92 语法。是什么让您认为他们会这样做?
  • 微软文档(我认为是知识库文章)。
  • 那是 Access 文档还是 ADO 文档?如果是前者,我敢肯定它没有这么说——我猜是后者,因为 ADO 确实总是使用 ANSI 92 语法。

标签: ms-access ms-access-2007 ms-access-2010 ansi-92


【解决方案1】:

在 Access 2010 中,SQL Server 语法兼容性的设置如下:

文件 > 选项 > 对象设计器 > 查询设计。

您首先需要检查是否设置了该选项,以确认您的查询行为是否正常。

对于LIKEALIKE,后者将以ANSI 方式工作,使用%_ 模式匹配。
在 SQL-89 兼容模式(MS Access SQL 子集)中,LIKE 仅适用于 *? 模式,但如果您将兼容性更改为 SQL-92,则需要使用 % 和 @987654328 重写查询@ 反而。

这就是引入ALIKE 的原因,它允许您编写符合ANSI 的模式,而不管您选择的兼容级别如何(因此在SQL-92 兼容模式下,两者的行为相同)。

【讨论】:

    【解决方案2】:

    确实没有理由在 Access 前端中将 ANSI 92 SQL 模式设置为 ON,除非您是一个懒惰的 SQL Server 程序员,想忘记他是在 Access 而不是 SQL Server 中编写 SQL。

    您不想这样做的原因是因为它改变了 Access 应用程序中的内容,而实际上并没有做任何事情来增强与 SQL Server 后端的交互。也就是说,如果您在 Access 前端的 SQL 中使用 SQL 89 通配符,则 ODBC 驱动程序会在将 SQL 发送到服务器时负责转换为 SQL 92 通配符。唯一的例外是直通查询,但无论如何这些都是用服务器的本机 SQL 编写的。

    【讨论】:

    • 希望以 SQL Server 兼容的语法编写查询有充分的理由:如果需要,它可以更轻松地将查询移动到 SQL Server,如果需要,它可以更容易在其他系统中重用它们如果您决定离开 Access,它允许团队在整个组织中维护一组兼容的查询,而不是使用特定于 Access 的查询和 SQL Server 查询。您提出了一个很好的观点,即兼容模式并没有给 Access 本身带来太多好处,但是您不能假设人们这样做的选择纯粹是基于他们的懒惰。这是免费的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2023-03-14
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多