回 帖 发 新 帖 刷新版面

主题:SQL-UPDATE 代码不唯一

向各位老师请教:
      我在上一级程序打开一个表(A),别名为"InputModel",从上一级程序传到本级程序的一张表,表名形式参数为"CalTable".
     现要根据"Caltable"表中的内容,更新A表的内容,条件是两者代码相同.我写下列代码,提示代码不唯一. 敬请各位高手指点!!!不胜感激!!!
UPDATE dbf('InputModel') SET 活跃度=a.活跃度,;
                             成交额比=a.成交额比;
    FROM (CalTable) a WHERE ALLTRIM(代码)==ALLTRIM(a.代码)
  

回复列表 (共8个回复)

沙发

UPDATE dbf('InputModel') SET 活跃度=a.活跃度,;
                             成交额比=a.成交额比;
    FROM (CalTable) a WHERE ALLTRIM([color=0000ff]InputModel.[/color]代码)==ALLTRIM(a.代码)

像你这样子在描述中[color=ff00ff]打开一个表(A)[/color]
建议你还是不要使用别名的好.
而且好像没有必要去使用dbf( )函数

板凳

谢谢二楼的支持!
在上一级程序中,因是通用程序,表A在不同的情况下是不同的个表,因此每次打开一个表后用一个别名以便后面的程序代码通用.
   若不用DBF('InputModel')而用('InputModel')也一样,这里不是问题
   问题是出在WHERE子句中, 如何写这一个WHERE 子句.
   若将WHERE子句改为以下,则提示函数缺少")"
ALLTRIM(&inputmodel..代码)==ALLTRIM(a.代码)

3 楼

看你用到宏替代,
仿佛InputModel是一个字符串,
而不是单纯的表名,
如果是这样子的话 Dbf( ) 函数不应该加引号,
这个时候倒是需要使用别名,而不应该使用宏替换.

4 楼

谢谢三楼的支持!
    问题不出在DBF()上,我试过如果不用WHERE子句,是可以成功执行的.
    问题就在WHERE子句上,该怎样在代码前加上表别名.以前是看到当一个表名是表达时,在WHERE子句中,可用宏替换加表名再跟两个圆点,再加字段名即可.
   现在不知问题在哪里!!!请各位高手多多支持!谢谢!!

5 楼

试一试:ALLTRIM((inputmodel).代码)==ALLTRIM(a.代码)

6 楼


谢谢四楼的支持!
    仍然不行,仍提示:函数名缺少 ) 。
    敬请各位高手出招!多谢!!!!

7 楼

use dbf('InputModel') in 0 again alias InputModel007
UPDATE InputModel007 SET 活跃度=CalTable.活跃度,;
                             成交额比=CalTable.成交额比;
    FROM CalTable WHERE ALLTRIM(InputModel007.代码)==ALLTRIM(CalTable.代码)

8 楼


按七楼的方案,试成功!!! 多谢谢专家的热心指教!!!! 不胜感激.
按此思路.
  Update inputmodel set ....
         where ALLTRIM(inputModel.代码)==ALLTRIM(a.代码)
  也试成功.
  我奇怪,以前表名是表达式就要用DBF()函数,现在对表别名,可直接用别名不需再用DBF(),真是画跎添足!!!
   再次感谢!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册