Microsoft Jet中LIKE运算符中的正确多字符通配符是什么,以及哪些设置会影响它(如果有的话)?我支持在Microsoft Jet(在Access数据库上)上运行的旧ASP应用程序,它在LIKE运算符中使用%符号,但我有一个客户,他的环境显然有问题,因为%字符被理解为常规我认为他的多字符通配符是*.此外,我几乎可以肯定,在过去,我使用*代替%编写了查询应用程序.最后,Microsoft Access(作为应用程序)也只适用于*而不是%(但我不确定它是多么相关).
我只花了大约20分钟在互联网上搜索没有任何有用的结果,所以我认为在stackoverflow上问一下会有用.有人可能已经知道了,最好将堆栈溢出的潜在答案保留在任何其他随机讨论论坛上.
直接的答案是通配符的行为取决于所使用的接口的ANSI查询模式.
ANSI-89查询模式('传统模式')使用*
字符,ANSI-92查询模式('SQL Server兼容模式')使用该%
字符.这些模式特定于ACE/Jet,并且只与ANSI/ISO SQL-89和SQL-92标准有相似之处.
ADO接口(OLE DB)始终使用ANSI-92查询模式.
DAO接口始终使用ANSI-89查询模式.
使用ODBC时,可以通过ExtendedAnsiSQL标志显式指定查询模式.
从2003版本开始,MS Access用户界面可以使用任一查询模式,因此不要假设它在任何给定时间是一个或另一个(例如,不要在验证规则中使用特定于查询模式的通配符).
ACE/Jet SQL语法有一个ALIKE
关键字,它允许ANSI-92查询模式字符(%
和_
),无论接口的查询模式如何,但是有一个轻微的缺点,即ALIKE
关键字不兼容SQL-92(但ALIKE
仍然高度可移植) .然而,主要的缺点是我理解ALIKE
关键字没有得到官方支持(尽管我无法想象它会很快消失或改变行为).