with cte1 as
(
   select BH as 'BH', min(sxh) as 'SXH',avg(PJF) as 'PJF' from KH_SubCompManager where nf='2011'  group by BH
)
update  KH_SubCompManager set DF=cte1.PJF where BH=cte1.BH and SXH=cte1.SXH运行时提示错误:消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "cte1.BH"。
消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "cte1.SXH"。这是什么错误,这个错误又是什么意思???

解决方案 »

  1.   

    这个错误就是表的前缀用错了。
    比如这句:update KH_SubCompManager set DF=cte1.PJF where BH=cte1.BH and SXH=cte1.SXH
    cte1或者其它,必须在全局的语句里出现,如果没或者非全局,就报错了。另外操作数据库推荐:cyq.data,试一下,爽歪歪。
      

  2.   

    你用的是CTE(Common Table Expression)
    问题在于,你在UPDATE语句中使用了KH_SubCompManager和cte1这两个表来确定更新的范围,却没有指定FROM子名,所以sql解析器是并不知道cte1为何物。正确做法:with cte1 as
    (
        select BH as 'BH', min(sxh) as 'SXH',avg(PJF) as 'PJF' 
        from KH_SubCompManager where nf='2011' group by BH
    )
    UPDATE KH_SubCompManager SET DF=cte1.PJF 
    FROM KH_SubCompManager s INNER JOIN cte1 c
    ON s.BH=c.BH AND s.SXH=c.SXH
    注意UPDATE语句的用法
      

  3.   

    通常都是联结没有做好,就是 XX.字段 的XX打错了。这都是逻辑上的问题,你理清一下思路,就很容易发现哪里出问题了。
      

  4.   

    update KH_SubCompManager set DF=cte1.PJF where BH=cte1.BH and SXH=cte1.SXH你这里读的表没有用到你上面写的cte
    但是却想用cte取到的内容。
      

  5.   

    update KH_SubCompManager set DF=cte1.PJF from KH_SubCompManager khs inner join  cte1 c on khs.BH=c.BH and khs.SXH=c.SXH这样看看
      

  6.   

    with cte1 as
    (
        select BH as 'BH', min(sxh) as 'SXH',avg(PJF) as 'PJF' 
        from KH_SubCompManager where nf='2011' group by BH
    )
    UPDATE KH_SubCompManager SET DF=cte1.PJF 
    FROM KH_SubCompManager s INNER JOIN cte1 c
    ON s.BH=c.BH AND s.SXH=c.SXH这样不行啊。提示错误:消息 4104,级别 16,状态 1,第 1 行
    无法绑定由多个部分组成的标识符 "cte1.PJF"。
      

  7.   


    消息 4104,级别 16,状态 1,第 1 行
    无法绑定由多个部分组成的标识符 "cte1.PJF"。
      

  8.   

    with cte1 as
    (
      select BH as BH, min(sxh) as SXH,avg(PJF) as PJF 
          from KH_SubCompManager where nf='2011' group by BH
    )
    update KH_SubCompManager set DF=cte1.PJF 
    from KH_SubCompManager,cte1
    where KH_SubCompManager.BH=cte1.BH and KH_SubCompManager.SXH=cte1.SXH
      

  9.   


    with cte1 as
    (
        select BH as BH, min(sxh) as SXH,avg(PJF) as PJF 
        from KH_SubCompManager where nf='2011' group by BH
    )
    update KH_SubCompManager set DF=cte1.PJF from KH_SubCompManager khs inner join cte1 c on khs.BH=c.BH and khs.SXH=c.SXH
    消息 4104,级别 16,状态 1,第 1 行
    无法绑定由多个部分组成的标识符 "cte1.PJF"。还是不行啊
      

  10.   


    --你这个是有问题的,没有数据,应该有一对多的关系
    update a set DF=(select top 1 PJF from cte1 where BH=a.BH and SXH=a.SXH)
    from KH_SubCompManager a
      

  11.   


    update KH_SubCompManager set DF=cte1.PJF from KH_SubCompManager khs inner join cte1 c on khs.BH=c.BH and khs.SXH=c.SXH注意红色部分,你已经在join条件中为表cte1指定了别名c,那么在其它地方引用cte1时,只能用别名c,即cte1.PJF应为c.PJF若你没有指定别名,如#9楼一样,就用全名引用其列