update cli_jf set ( cli_ass,cli_bank,cli_count,cli_inv,cli_zip,cli_per,cli_memo,cli_type_n,dis_no,rebate_enable,sex,xl,jf,nl,pr_jf ) = (select cli_ass,cli_bank,cli_count,cli_inv,cli_zip,cli_per,cli_memo,cli_type_n,dis_no,rebate_enable,sex,xl,0,nl,0 from ##temp_jf b where cli_no=cli_jf.cli_no )  where exists (select 1 from b where b.cli_no = cli_jf.cli_no)
服务器: 消息 170,级别 15,状态 1,行 8
第 8 行: '(' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 9
在关键字 'where' 附近有语法错误。

解决方案 »

  1.   

    服务器: 消息 170,级别 15,状态 1,行 8
    第 8 行: '(' 附近有语法错误。
    服务器: 消息 156,级别 15,状态 1,行 9
    在关键字 'where' 附近有语法错误。
      

  2.   

    try this,update a 
    set 
    cli_ass=b.cli_ass,
    cli_bank=b.cli_bank,
    cli_count=b.cli_count,
    cli_inv=b.cli_inv,
    cli_zip=b.cli_zip,
    cli_per=b.cli_per,
    cli_memo=b.cli_memo,
    cli_type_n=b.cli_type_n,
    dis_no=b.dis_no,
    rebate_enable=b.rebate_enable,
    sex,xl=b.xl,
    jf=0,
    nl=b.nl,
    pr_jf=0
    from cli_jf a
    inner join ##temp_jf b 
    on a.cli_no=b.cli_no
      

  3.   


    update a 
    set 
    cli_ass=b.cli_ass,
    cli_bank=b.cli_bank,
    cli_count=b.cli_count,
    cli_inv=b.cli_inv,
    cli_zip=b.cli_zip,
    cli_per=b.cli_per,
    cli_memo=b.cli_memo,
    cli_type_n=b.cli_type_n,
    dis_no=b.dis_no,
    rebate_enable=b.rebate_enable,
    sex,xl=b.xl,
    jf=0,
    nl=b.nl,
    pr_jf=0
    from cli_jf a
    inner join ##temp_jf b 
    on a.cli_no=b.cli_no
    MSSQL不能按照你那样写的,需要更新的字段必须与新的值字段一一对应
      

  4.   

    很多网叶是我那种写法,顺便问一下 那个 inner join ,如果采用ap0405140的办法,如果会不会出现当a.cli_no<>b.cli_no时,cli_ass,cli_bank,cli_count,cli_inv,cli_zip,cli_per,cli_memo,cli_type_n,dis_no,rebate_enable,sex,xl,jf,n即使原来有值 也为空吗?
      

  5.   

    "很多网叶是我那种写法"
    -->不会吧,确认你的数据库是sql server??如果采用ap0405140的办法,如果会不会出现当...时,即使原来有值   也为空吗? 
    -->只要两个表的cli_no能关联上,就会被更新为##temp_jf表对应字段的值.
      

  6.   

    SQL SERVER更新多列的语法是update tb
    set col1 = .. , col2 = .. , col3 = ..
    from ..
    where ..没有用括号都括起来那种写法,把表的数据看成一个数学集合。
      

  7.   

    这个网叶说可以的http://www.cnblogs.com/Fernando/archive/2007/12/17/1002978.html
      

  8.   

    update a 
    set 
    cli_ass=b.cli_ass,
    cli_bank=b.cli_bank,
    cli_count=b.cli_count,
    cli_inv=b.cli_inv,
    cli_zip=b.cli_zip,
    cli_per=b.cli_per,
    cli_memo=b.cli_memo,
    cli_type_no=b.cli_type_no,
    dis_no=b.dis_no,
    rebate_enable=b.rebate_enable,
    sex=b.sex,
    xl=b.xl,
    jf=0,
    nl=b.nl,
    pr_jf=0
    from cli_jf a
    inner join ##temp_jf b 
    on a.cli_no=b.cli_no
    where exists (select 1 from ##temp_jf where ##temp_jf.cli_no = cli_jf.cli_no)服务器: 消息 4104,级别 16,状态 1
      

  9.   

    服务器: 消息 4104,级别 16,状态 1,行 1
    无法绑定由多个部分组成的标识符 "cli_jf.cli_no"。
      

  10.   

    where exists (select 1 from ##temp_jf where ##temp_jf.cli_no = cli_jf.cli_no)
    --> 这句是多余的,请删除.请看2楼代码!
      

  11.   

    那是因为##temp_jf表对应的字段也是空值.
      

  12.   

    你估计得真对,是我说错了, SORRY