我使用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改编自: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连接的变量被模糊为String,但我尝试将其设置为variable而不作任何更改。
通过ACE实现SQL是否存在“最长前缀匹配”查询不起作用的差异?如有任何指导,将不胜感激。
发布于 2017-05-31 19:43:43
首先,请阅读我对这个问题的评论。
第二,请阅读以下文章:
最后,如果您想将一个数据与另一个StartsWith("SomeString")数据进行比较,您可以使用如下所示:
SELECT
bcr.DialCode,
bcr.Destination,
cc.CountryCode
FROM table1 AS bcr
INNER JOIN table2 AS cc
ON cc.CountryCode = LEFT(bcr.DialCode, LEN(cc.CountryCode))
ORDER BY LEN(cc.CountryCode) DESC;有关更多详细信息,请参见:MS Access:左函数
注意:不要忘记在查询结束时使用;。MS数据库喜欢;)
https://stackoverflow.com/questions/44292945
复制相似问题