日期:2014-05-16  浏览次数:20913 次

请教一个iif返回列明的查询问题!
现在一个这种需求:如果用户输入的有条件,则根据输入条件查询,否则返回整张表的内容。
比如表为:test(编号 char);
如果没输入条件,则查询为:select * from test;
如果输入有条件,则查询为:select * from test where 编号='xxx';

我这样来构造sql:
select * from test where 编号=iif(isnull(var1),编号,var1);

这样我设想的是,如果用户传的有var1值,那么sql其实就相当于:select * from test where 编号=var1;
如果用户没有传var1值,我会给var1赋个空值,那么sql就是:select * from test where 编号=编号;这个查询条件恒成立,即返回全表记录。

现在问题是,如果var1赋值,那么select * from test where 编号=iif(isnull(var1),编号,var1);能返回预期效果。
如果没赋值,却不能返回任何值。
我猜是不是语句执行成:select * from test where 编号='编号',所以我:insert into test values('编号');
但是仍然不返回任何结果。
把列名换成英文也不行。
直接执行sql:select * from test where 编号=编号;能返回全表记录。
所以问题是在iif这了。
请教该如何实现呢?


------解决方案--------------------
检查var1中的值,你的代码是什么?用VBA ?
------解决方案--------------------
select * from test where 编号=iif(isnull(var1) or trim(var1)='',编号,var1);

估计你的 var1 传进去的不是空。 其实你可以断点调试一下看你的SQL语句是什么,贴出来可以进一步分析