【发布时间】:2017-06-01 04:03:01
【问题描述】:
我正在使用 ACE OLEDB 从 VBA 运行 SQL 查询,但未连接到 Access。我这样做是为了快速将一些 Excel 表格组合在一起。我不打算将此转换到另一个平台,因此更愿意解决当前问题。
VBA 代码对许多查询都没有问题,但我在以下查询中遇到了上述错误:
SELECT
bcr.DialCode,
bcr.Destination,
(
SELECT
TOP 1 cc.CountryCode
FROM
table2 AS cc
WHERE
bcr.DialCode LIKE cc.CountryCode+'%'
ORDER BY LEN(cc.CountryCode) DESC
) AS CountryCodes
FROM
table1 AS bcr
代码改编自:Longest prefix match in SQL Server 2000
目的是通过查找最具包容性的匹配项,将拨打的电话号码与目的地国家/地区匹配。重用输入和预期结果的引用文本示例(适用于本练习):
bcr.DialCode = '0841234567'
cc.CountryCode = {'084',
'0841',
'08412'}
Expected output = {'0841234567','Destination 1','08412'}
从网上搜索似乎我在查询中使用了保留字。但是我已经单独测试了查询的不同部分,没有收到任何错误。例如:
SELECT
bcr.DialCode,
bcr.Destination
FROM
table1 AS bcr
按预期工作。另外:
SELECT
TOP 1 cc.CountryCode
FROM
table2 AS cc
WHERE
cc.CountryCode LIKE '1'+'%'
ORDER BY LEN(cc.CountryCode) DESC
没有错误并输出预期的结果。
用于将查询传递给 ADO 连接的变量变暗为字符串,但我尝试设置为 Variant,没有任何变化。
通过 ACE 执行 SQL 是否可能存在差异,“最长前缀匹配”查询不起作用?任何指导将不胜感激。
【问题讨论】:
-
子查询
bcr.DialCode LIKE cc.CountryCode+'%'我认为他们需要反过来吗?并尝试使用 * 作为通配符。 -
ACE/OleDb 数据库引擎不知道 [%]。你必须用 [*] 替换它。
-
感谢您的指示。该查询确实可以使用
cc.CountryCode LIKE '1'+'%'如上所述(提供第三个查询)。它输出所有以1开头并且最大LEN 为4 的国家/地区代码。我尝试将%更改为*和[*],但出现相同的错误。尝试用[*]替换'%'并得到“没有为一个或多个必需参数提供值”。还有其他想法吗? -
请检查我的答案。