MS Access 很长并出现“表达式过长”错误
Posted
技术标签:
【中文标题】MS Access 很长并出现“表达式过长”错误【英文标题】:MS Access Very Long and Getting "Expression Too Long" Error 【发布时间】:2011-12-09 08:49:04 【问题描述】:我有一个带有大约 50 个“OR”条件且全部带有“Like”运算符的 SQL。我从 VB Access 代码执行此 SQL。
但是查询失败,说“Expression Too Long”错误(我认为主要是因为它在查询网格中超过了 1024 个字符。
SELECT *
FROM <My Database>
WHERE (
[Title] = ''
OR [Title] = ''
OR [Title] = ''
OR [Title] = ''
OR [Title] = ''
OR [Title] = ''
OR [Title] = ''
OR [Title] = ''
OR [Title] = ''
OR [Title] = ''
)
AND (
[TITLE] LIKE '*Afghanistan*'
OR [TITLE] LIKE '*Term1*'
OR [TITLE] LIKE '*Term2*'
OR [TITLE] LIKE '*Term3*'
OR ..<around 40 like these>
OR [COUNTRY] LIKE '*Country1*'
OR ...<around 40 like these>
);
关于如何解决此问题的任何想法或建议?
【问题讨论】:
你能把查询的SQL贴出来吗? 嗨 iDevlp,刚刚添加了代码示例.. 不要在帖子上签名,如果您想使用真实姓名,请在用户个人资料页面更改您的用户名。 :) 【参考方案1】:建议:将参数值插入基本“暂存”表(可能在另一个临时数据库中)并使用EXISTS
创建这些表的seni 连接。使用ALIKE
(而不是LIKE
),它始终使用标准SQL 通配符(%
)。
SELECT *
FROM MyTable AS m
WHERE EXISTS (
SELECT *
FROM MyExactParams AS x
WHERE m.Title = x.Title
)
AND (
EXISTS (
SELECT *
FROM MyPatternParams AS p
WHERE m.Title ALIKE '%' + p.Title + '%'
)
OR EXISTS (
SELECT *
FROM MyPatternCountries AS c
WHERE m.Country ALIKE '%' + c.Country + '%'
)
);
【讨论】:
MS-Access SQL 使用 * 和 ?作为通配符,而不是 T-SQL 的 % 和 _。 @webturner:你错了。再看一遍,"UseALIKE
(rather than LIKE
)..."
嗨 onedaywhen - 我只是没有话要感谢你..你真是太棒了..也感谢 Webturner。他昨天解决了我的疑惑。非常感谢你们......
所以不要使用非标准的*?
通配符,您可以使用非标准的ALIKE
关键字,进展并不顺利。谢谢指正。【参考方案2】:
首先感谢您将此作为单独的问题发布到your previous one。这是正确的做法:-)
重复的OR [Title] = ''
应该消失,它们只是杂乱无章,你只需要其中一个,假设你真的需要匹配一个空标题。
第二,你真的需要通配符吗?如果数据库设计得好,名为Country
的字段应该只包含国家/地区的名称,所以你可以说[Country]='Afghanistan'
。
如果您不需要通配符,那么 IN
关键字会很有用:您可以使用 [Country] IN ('Afghanistan', 'Term1', 'Term2', 'Term3')
检查多个选项
onedaywhen 的建议非常好(我+1),但我担心您的代码指向一些设计问题。你想用这段代码做什么:找到一切?验证输入?根据用户选择查找?
【讨论】:
您好 Webturner,感谢您的 cmets。它们非常有价值。我只是喜欢你们所做的无私帮助。要回答您的问题,是的..,实际上需要通配符。要求相当复杂。我必须搜索与任何国家/地区或来自该国家/地区的任何字符串相关的字符串。例如。来自世界各地寻找“IPAD in ASia”的人或寻找“IPAD”的亚洲人。以上是关于MS Access 很长并出现“表达式过长”错误的主要内容,如果未能解决你的问题,请参考以下文章