由于我无法完全控制的情况,我必须开发ACCESS查询,这些查询将存储在Access 2000 MDB中,但可以在以下任何一种情况下开发: Access 2000、2002、2003、2007、2010。这些查询将访问(通过链接表) MS SQL Server DB或access 2000 .MDB文件。
在过去,我们追踪到的问题是查询不兼容ANSI-92。我们通过选中“工具|选项”对话框(在低于2007的Access版本下)的“表/查询”选项卡中的复选框解决了此问题。
我们在不同的系统之间移动这些访问应用程序.MDBs,现在我们通常没有任何问题。
然而,我刚刚开发了一个查询,它可以很好地处理所有内部连接,但是当我将其中一个连接更改为外部连接时,查询在Access 2010下失败,并出现"Invalid Operation“错误。所以我想我应该检查ANSI-92复选框是否仍然被设置。我找不到它。
现在,我知道Access 2003和更高版本自动使用ANSI 92语法,但我想知道在这种情况下(相当特定的情况)是否有任何方法可以检查这些查询是否属于这种情况。我观察到,当我们改变复选框时,我所有的“喜欢”查询都变成了"ALike“查询……
因此,问题归结为在这种情况下ANSI 92语法是完全透明的,而我的查询失败的原因是其他原因……
蒂娅,保罗
发布于 2011-06-17 15:48:52
在Access 2010中,SQL Server语法兼容性设置位于:
文件>选项>对象设计器>查询设计。
您首先需要检查该选项是否已设置,以确认您的查询行为是否正常。
至于LIKE和ALIKE,后者将以ANSI方式工作,使用%和_模式匹配。
在SQL-89兼容模式( MS Access SQL子集)中,LIKE仅适用于*和?模式,但如果您将兼容性更改为SQL-92,则需要改用%和_重写查询。
这就是引入ALIKE的原因,它允许您编写符合ANSI的模式,而不考虑您选择的兼容级别(因此在SQL-92兼容模式下,两者的行为是相同的)。
发布于 2011-06-18 02:46:46
实际上,没有理由在Access前端中将ANSI 92SQL模式设置为ON,除非您是一个懒惰的SQL Server程序员,他希望忘记自己是在Access而不是SQL Server中编写SQL。
您不想这样做的原因是它改变了Access应用程序中的一些东西,而实际上并没有采取任何措施来增强与SQL Server后端的交互。也就是说,如果在Access前端的SQL中使用SQL 89通配符,则ODBC驱动程序会在将SQL发送到服务器时负责转换为SQL 92通配符。唯一的例外是直通查询,但无论如何,这些查询都是用服务器的原生SQL编写的。
https://stackoverflow.com/questions/6382064
复制相似问题