select 语句中的字段名的别名不能是变量吗?

时间:2022-05-08 19:01:03
我有一个select语句
ms=ALLTRIM(pro.mc)+'数量'
mj=ALLTRIM(pro.mc)+'金额'
dm_s='x.sum_'+ALLTRIM(pro.dyzd)               
dm_p='x.price_'+ALLTRIM(pro.dyzd)
最先用:
SELECT x.rqi as 日期,x.bh as 合同编号,x.sheng as 省,x.shi as 市,x.xxmc as 学校名称,x.dls as 代理商,x.bsc as 办事处,&dm_s as &ms, &dm_p as &mj,x.bzhu as 备注 FROM gmxx x WHERE &dm_s<>0 ORDER BY 1 ASC INTO CURSOR tmp 
报:不能识别的短语或关键字
后来将ms和mj前的&去掉,即:
SELECT x.rqi as 日期,x.bh as 合同编号,x.sheng as 省,x.shi as 市,x.xxmc as 学校名称,x.dls as 代理商,x.bsc as 办事处,&dm_s as ms, &dm_p as mj,x.bzhu as 备注 FROM gmxx x WHERE &dm_s<>0 ORDER BY 1 ASC INTO CURSOR tmp
程序没有报错,但运行出来的字段名不是我想要的,成了ms 和 mj
后经人指点,改成:
cSq="SELECT x.rqi as 日期,x.bh as 合同编号,x.sheng as 省,x.shi as 市,x.xxmc as 学校名称,x.dls as 代理商,x.bsc as 办事处,"+dm_s+" as "+ms+","+dm_p+" as "+mj+",x.bzhu as 备注 FROM gmxx x WHERE &dm_s<>0 ORDER BY 1 ASC INTO CURSOR tmp"
&cSq
运行到&cSq,报‘不能识别的短语或关键字’
将&cSq改成 eval(cSq) 及 Execscript(cSq),均报‘语法错误’
请问:select 语句中的字段名的别名不能是变量吗?

15 个解决方案

#1


Create Cursor T1 (A1 I)
For m.lnI=1 To 2
Insert Into T1 Values (1*m.lnI)
Endfor

ms="A"+'2'
mj="A"+'1'
dm_s='x.A'+"1"
Select &mj. As &ms. From T1 x Where &dm_s.<>0

#2


所以写法1应该没错,应该是全角 ,的原因吧。

#3


cSq="Select "+mj+" As "+ms+" From T1 x Where "+dm_s+"<>0"
&cSq

这样也可以,所以问题都是出在其他地方,如全角逗号等。

#4


不是,我一般根本不用全角,况且我什么都没动,只是将&去掉,就对了,加&就不对,好奇怪啊

#5


你看看我的例子与的区别。

#6


另外检查一下变量名与字段名有没有重复的。

#7


不过,我在单步调试时,发现cSq中的内容不全
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致?

#8


 
_CLIPTEXT=cSq

然后打开VFP中文本粘帖,看看内容是否有问题?

#9


引用 7 楼 feiren_1012 的回复:
不过,我在单步调试时,发现cSq中的内容不全 
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致?

VFP语句的长度的确是有限制的,似乎应该是限制在255字符内。

#10


引用 9 楼 xy111222333 的回复:
引用 7 楼 feiren_1012 的回复:
不过,我在单步调试时,发现cSq中的内容不全 
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致? 


VFP语句的长度的确是有限制的,似乎应该是限制在255字符内。


没有具体的根据,似乎是记忆有误。

#11


本帖最后由 dkfdtf 于 2009-07-13 21:56:04 编辑
这样试试:

    text to m.cSQL noshow textmerge
SELECT x.rqi as 日期, x.bh as 合同编号, x.sheng as 省, x.shi as 市, x.xxmc as 学校名称, ;
x.dls as 代理商, x.bsc as 办事处, <<dm_s>> as <<ms>>, <<dm_p>> as <<mj>>, x.bzhu as 备注 ;
FROM gmxx x WHERE <<dm_s>> <>0 ORDER BY 1 ASC INTO CURSOR tmp
    endtext
* MessageBox( m.cSQL )
ExecScript( m.cSQL )


#12


VFP 一行文字(字符)的最大长度  255

如:
csql="这个字符最大为255"

如果超过255,分开两个字符串即可,如:字符串长度为275,就分成2个相等或一个255,另一个20都可以:
csql="这个字符最大为255"+"这个字符最大为20"

csql="这个字符最大为100"+"这个字符最大为155"
...

#13


我已照11楼的试过,依然报‘语法错误’
另外1楼的程序我已在我机器上运行,没有问题,但我那个select语句照1楼的方式试时,就报‘不能识别的短语或关键字’,
用_CLIPTEXT=cSq 查看csq中的内容,发现内容是完整的(可能语句太长,在监视窗口中没有显示全),另外也检查了全角半角,发现也不是全角半角的问题,真是奇怪,到底是哪里的问题,难道是安装的8.0版本有问题?那为何1楼代码在我机器上运行又是对的?

#14


把你得到的 cSql 内容贴上来看看

#15


我的问题已经解决,不是语句的问题,是字段本身的问题。谢谢各位老师热心解答。

#1


Create Cursor T1 (A1 I)
For m.lnI=1 To 2
Insert Into T1 Values (1*m.lnI)
Endfor

ms="A"+'2'
mj="A"+'1'
dm_s='x.A'+"1"
Select &mj. As &ms. From T1 x Where &dm_s.<>0

#2


所以写法1应该没错,应该是全角 ,的原因吧。

#3


cSq="Select "+mj+" As "+ms+" From T1 x Where "+dm_s+"<>0"
&cSq

这样也可以,所以问题都是出在其他地方,如全角逗号等。

#4


不是,我一般根本不用全角,况且我什么都没动,只是将&去掉,就对了,加&就不对,好奇怪啊

#5


你看看我的例子与的区别。

#6


另外检查一下变量名与字段名有没有重复的。

#7


不过,我在单步调试时,发现cSq中的内容不全
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致?

#8


 
_CLIPTEXT=cSq

然后打开VFP中文本粘帖,看看内容是否有问题?

#9


引用 7 楼 feiren_1012 的回复:
不过,我在单步调试时,发现cSq中的内容不全 
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致?

VFP语句的长度的确是有限制的,似乎应该是限制在255字符内。

#10


引用 9 楼 xy111222333 的回复:
引用 7 楼 feiren_1012 的回复:
不过,我在单步调试时,发现cSq中的内容不全 
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致? 


VFP语句的长度的确是有限制的,似乎应该是限制在255字符内。


没有具体的根据,似乎是记忆有误。

#11


本帖最后由 dkfdtf 于 2009-07-13 21:56:04 编辑
这样试试:

    text to m.cSQL noshow textmerge
SELECT x.rqi as 日期, x.bh as 合同编号, x.sheng as 省, x.shi as 市, x.xxmc as 学校名称, ;
x.dls as 代理商, x.bsc as 办事处, <<dm_s>> as <<ms>>, <<dm_p>> as <<mj>>, x.bzhu as 备注 ;
FROM gmxx x WHERE <<dm_s>> <>0 ORDER BY 1 ASC INTO CURSOR tmp
    endtext
* MessageBox( m.cSQL )
ExecScript( m.cSQL )


#12


VFP 一行文字(字符)的最大长度  255

如:
csql="这个字符最大为255"

如果超过255,分开两个字符串即可,如:字符串长度为275,就分成2个相等或一个255,另一个20都可以:
csql="这个字符最大为255"+"这个字符最大为20"

csql="这个字符最大为100"+"这个字符最大为155"
...

#13


我已照11楼的试过,依然报‘语法错误’
另外1楼的程序我已在我机器上运行,没有问题,但我那个select语句照1楼的方式试时,就报‘不能识别的短语或关键字’,
用_CLIPTEXT=cSq 查看csq中的内容,发现内容是完整的(可能语句太长,在监视窗口中没有显示全),另外也检查了全角半角,发现也不是全角半角的问题,真是奇怪,到底是哪里的问题,难道是安装的8.0版本有问题?那为何1楼代码在我机器上运行又是对的?

#14


把你得到的 cSql 内容贴上来看看

#15


我的问题已经解决,不是语句的问题,是字段本身的问题。谢谢各位老师热心解答。