两个几乎相同的Access查询,一个给出“无效的过程调用”

时间:2016-04-05 21:23:07

标签: sql ms-access ms-access-2010

这样运行正确:

select [feature number], 
len(mid([feature number],instr([feature number],"."))) > 2 from featuredata

这会产生Invalid procedure call错误:

select [feature number] from featuredata 
where len(mid([feature number],instr([feature number],"."))) > 2

feature number是一个文本字段,但即使我阻止处理非数字值:

select [feature number] from featuredata 
where iif(isnumeric([feature number]),  
len(mid([feature number],
instr([feature number],"."))) > 2,false)

我仍然遇到Invalid procedure call错误。为什么我会收到此错误?

1 个答案:

答案 0 :(得分:2)

这是怎么回事:

如果instr([feature number],".")为0,则调用

mid([feature number], 0),这是无效的。

您不应该在isnumeric([feature number])中检查iif,而是

instr([feature number],".") > 0

修改:为什么第一个版本会运行?

当它运行时,对于没有"的每一行,它应该返回#Function!。"在[feature number]。所以错误也发生在这里。