我想要一个明确的答案,为什么我不能处理像OleDb这样的查询
"select top 0 * FROM [APPELLATION$] WHERE (((([libel_app] LIKE '%g') OR ([region] LIKE '%g')) OR ([couleur] LIKE '%g')))"
我可以使用SQL但是当我尝试从Excel文件中获取某些数据时,它会抛出一个错误,告诉我我使用了一些受限制的单词或者我有一些受限制的符号。我阅读了受限制的单词和符号列表,但在我的查询中找不到任何这些单词和符号。我的程序给了我SQL请求,我不想最后查看TOP N编号是否为零,但是如果我没有解决方案......
提前致谢。
答案 0 :(得分:2)
您的同事应首先从其代码中删除硬编码的特定于风味的SQL,特别是如果要在不同类型的连接上使用它。
查看Is there an ANSI SQL alternative to the MYSQL LIMIT keyword?上接受的答案,了解一些风味。 Excel没有在那里列出,我敢打赌它使用与MsAccess相同的语法,但我并不感到惊讶它在这样一个奇怪的查询上完全不同。正如Paddy已经提到的那样,查询没有任何意义,应该避免使用。
通过匹配“SELECT TOP 0”修复此问题很难看,并且会使维护软件变得纯粹地狱(在那里:()
答案 1 :(得分:0)
N
中的TOP N
必须是数字值1(银行家四舍五入)或更高。
e.g。
SELECT TOP 0.5 * FROM MyTable; -- rounds to zero = error
SELECT TOP 0.6 * FROM MyTable; -- rounds to 1 = no problem