尝试使用SELECT TOP 0 *时,MS Access出错

时间:2012-03-12 09:38:51

标签: c# sql oledb export-to-excel

我想要一个明确的答案,为什么我不能处理像OleDb这样的查询

"select top 0 * FROM [APPELLATION$] WHERE (((([libel_app] LIKE '%g') OR ([region] LIKE '%g')) OR ([couleur] LIKE '%g')))"

我可以使用SQL但是当我尝试从Excel文件中获取某些数据时,它会抛出一个错误,告诉我我使用了一些受限制的单词或者我有一些受限制的符号。我阅读了受限制的单词和符号列表,但在我的查询中找不到任何这些单词和符号。我的程序给了我SQL请求,我不想最后查看TOP N编号是否为零,但是如果我没有解决方案......

提前致谢。

2 个答案:

答案 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