2011-06-17 83 views
3

由于情况不完全在我的控制之下,因此我必须开发ACCESS查询,这些查询将存储在Access 2000 MDB中,但可以在任何一种:访问2000年,2002年,2003年,2007年,2010年。这些查询将访问(通过链接表)MS SQL Server数据库或Access 2000.MDB文件。确保Access 2000 mdb上的SQL-92到Access 2010下的SQL Server

在过去,我们遇到了一些问题,我们追踪到的查询不是ANSI-92兼容的。我们通过在“工具”|“选项”对话框的表格/查询选项卡中标记复选框来解决这个问题(在旧版本的Access 2007以下)。

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

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

现在,我知道Access 2003和更高版本自动使用ANSI 92语法,但我想知道是否有任何方法来检查这是这种情况(在特定情况下)这些查询。我观察到,当我们改变复选框时,我所有的“Like”查询变成了“ALike”查询...

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

TIA, 保罗

+1

A2003及更高版本不自动使用ANSI 92语法。你认为他们做什么? – 2011-06-17 18:43:52

+0

微软文档(我认为在知识库文章)。 – PaoloFCantoni 2011-06-22 04:19:20

+0

是Access文档还是ADO文档?如果前者,我确定它没有这么说 - 我猜它是后者,因为ADO确实总是使用ANSI 92语法。 – 2011-06-23 01:43:43

回答

1

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

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

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

至于LIKE vs ALIKE,后者将以ANSI方式工作,使用%_模式匹配。
在SQL-89兼容模式(MS Access SQL子集)中,LIKE只能与*?模式一起使用,但如果将兼容性更改为SQL-92,则需要用%_来重写查询。

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

0

真的没有理由在Access前端设置ANSI 92 SQL模式ON,除非你是一个懒惰的SQL Server程序员,他想要忘记他正在使用Access而不是SQL Server编写SQL。

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

+5

想要以SQL Server兼容语法编写查询有很好的理由:如果需要,它可以更轻松地将查询移动到SQL Server,如果您决定从Access迁移出去,则可以更轻松地在其他系统中重用它允许一个团队在整个组织中维护一组兼容的查询,而不是具有特定于Access的SQL和SQL Server的查询。您提出了一个很好的观点,即兼容性模式对Access本身没有太大的帮助,但是您不能认为人们的选择纯粹是基于懒惰。这是无偿的。 – 2011-06-17 23:10:20