主题:请教CBL518老师:是不是EVALUATE()不可用于SQL中的SELE语句中?
北京种子乐
[专家分:3710] 发布于 2008-05-31 12:23:00
记得07年学SQL时有一个东西不能用在SELE查询语句中,
是不是EVALUATE()?如果是那如何解决这个问题?
最后更新于:2008-05-31 12:25:00
回复列表 (共5个回复)
沙发
cbl518 [专家分:57140] 发布于 2008-05-31 18:09:00
老兄你好:
是不是 EVALUATE() 不能用在 SELE 查询语句中?
对 EVALUATE() 不能用在 SELE 查询语句中,当某个变量值用。
但是,它可以整句求值!
例:
zd1="字段名"
solcmd="sele "+zd1+ " from 表"
EVALUATE(solcmd) && 可以运行
solcmd=zd1
sele EVALUATE(solcmd) from 表 && 不可以运行
板凳
cbl518 [专家分:57140] 发布于 2008-05-31 18:16:00
如果是那如何解决这个问题?
1 整句邱值,这种方法,速度快,可靠性高。
zd1="字段名"
solcmd="sele "+zd1+ " from 表"
EVALUATE(solcmd) && 可以运行
2 宏替换方法(老兄常用的方法吧):
zd1="字段名"
sele &zd1. from 表
3 楼
cbl518 [专家分:57140] 发布于 2008-05-31 18:20:00
老兄要的是,这种调用格式吧?
zd1=EVALUATE(字段名) && 用字段中的值作为语句的一部分。
solcmd="sele "+zd1+ " from 表"
EVALUATE(solcmd) && 可以运行
4 楼
北京种子乐 [专家分:3710] 发布于 2008-05-31 19:50:00
FOR II=1 TO 仓库管理级别_FL
VV="SPSYB_FL_"+STR(II,1) &&商品索引表_分类_
VV1=分类索引列名(II) &&栏目名
VV2=VV1
FOR JJ=1 TO II-1
VV1=VV1+","+分类索引列名(JJ)
NEXT JJ
SELECT &VV1. ;
FROM SPXZ_0HB ;
WHERE NOT EMPT(EVAL(VV2))
GROUP BY &VV1. ;
INTO TABLE (VV)
USE
SELECT SPXZ_0HB
NEXT II
可以看出“WHERE NOT EMPT(EVAL(VV2))”中的VV2是随着II值变化的字段名,想取这个值不为空的记录。
5 楼
cbl518 [专家分:57140] 发布于 2008-06-01 07:22:00
LOCAL cCmdExp
FOR II=1 TO 仓库管理级别_FL
VV="SPSYB_FL_"+STR(II,1) &&商品索引表_分类_
VV1=分类索引列名(II) &&栏目名
VV2=VV1
FOR JJ=1 TO II-1
VV1=VV1+","+分类索引列名(JJ)
NEXT JJ
cCmdExp='SELECT '+VV1+ ' FROM SPXZ_0HB WHERE NOT EMPT('+EVAL(VV2);
+') GROUP BY '+VV1+' INTO TABLE '+VV
&cCmdExp.
USE
SELECT SPXZ_0HB
NEXT II
我来回复