主题:SQL-UPDATE 代码不唯一
pupil
[专家分:0] 发布于 2008-10-03 10:45:00
向各位老师请教:
我在上一级程序打开一个表(A),别名为"InputModel",从上一级程序传到本级程序的一张表,表名形式参数为"CalTable".
现要根据"Caltable"表中的内容,更新A表的内容,条件是两者代码相同.我写下列代码,提示代码不唯一. 敬请各位高手指点!!!不胜感激!!!
UPDATE dbf('InputModel') SET 活跃度=a.活跃度,;
成交额比=a.成交额比;
FROM (CalTable) a WHERE ALLTRIM(代码)==ALLTRIM(a.代码)
回复列表 (共8个回复)
沙发
moz [专家分:37620] 发布于 2008-10-03 10:54:00
UPDATE dbf('InputModel') SET 活跃度=a.活跃度,;
成交额比=a.成交额比;
FROM (CalTable) a WHERE ALLTRIM([color=0000ff]InputModel.[/color]代码)==ALLTRIM(a.代码)
像你这样子在描述中[color=ff00ff]打开一个表(A)[/color]
建议你还是不要使用别名的好.
而且好像没有必要去使用dbf( )函数
板凳
pupil [专家分:0] 发布于 2008-10-03 11:52:00
谢谢二楼的支持!
在上一级程序中,因是通用程序,表A在不同的情况下是不同的个表,因此每次打开一个表后用一个别名以便后面的程序代码通用.
若不用DBF('InputModel')而用('InputModel')也一样,这里不是问题
问题是出在WHERE子句中, 如何写这一个WHERE 子句.
若将WHERE子句改为以下,则提示函数缺少")"
ALLTRIM(&inputmodel..代码)==ALLTRIM(a.代码)
3 楼
moz [专家分:37620] 发布于 2008-10-03 16:09:00
看你用到宏替代,
仿佛InputModel是一个字符串,
而不是单纯的表名,
如果是这样子的话 Dbf( ) 函数不应该加引号,
这个时候倒是需要使用别名,而不应该使用宏替换.
4 楼
pupil [专家分:0] 发布于 2008-10-03 16:53:00
谢谢三楼的支持!
问题不出在DBF()上,我试过如果不用WHERE子句,是可以成功执行的.
问题就在WHERE子句上,该怎样在代码前加上表别名.以前是看到当一个表名是表达时,在WHERE子句中,可用宏替换加表名再跟两个圆点,再加字段名即可.
现在不知问题在哪里!!!请各位高手多多支持!谢谢!!
5 楼
qd163 [专家分:230] 发布于 2008-10-03 19:14:00
试一试:ALLTRIM((inputmodel).代码)==ALLTRIM(a.代码)
6 楼
pupil [专家分:0] 发布于 2008-10-03 22:05:00
谢谢四楼的支持!
仍然不行,仍提示:函数名缺少 ) 。
敬请各位高手出招!多谢!!!!
7 楼
moz [专家分:37620] 发布于 2008-10-03 22:25:00
use dbf('InputModel') in 0 again alias InputModel007
UPDATE InputModel007 SET 活跃度=CalTable.活跃度,;
成交额比=CalTable.成交额比;
FROM CalTable WHERE ALLTRIM(InputModel007.代码)==ALLTRIM(CalTable.代码)
8 楼
pupil [专家分:0] 发布于 2008-10-03 23:03:00
按七楼的方案,试成功!!! 多谢谢专家的热心指教!!!! 不胜感激.
按此思路.
Update inputmodel set ....
where ALLTRIM(inputModel.代码)==ALLTRIM(a.代码)
也试成功.
我奇怪,以前表名是表达式就要用DBF()函数,现在对表别名,可直接用别名不需再用DBF(),真是画跎添足!!!
再次感谢!!!
我来回复