解决方案 »

  1.   

     ' update ['+@bmc+'] set 住户编号=a.住户编号 from ['+@bmc+']
       inner join (select 住户编号,住户名称 from 住户资料) b on b.住户编号=['+@bmc+'].住户编号
       inner join (select 住户编号,住户名称 from 住户资料 
       where id=(select MAX(id) from 住户资料 where 住户资料.住户名称=b.住户名称))a
       on a.住户名称=b.住户名称 where ['+@bmc+']<>''住户资料'''  注意最后where条件,是否少了字段
      

  2.   

    'update ['+@bmc+'] set 住户编号=a.住户编号 from ['+@bmc+']
        , (select 住户编号,住户名称 from 住户资料) b ,
       , (select 住户编号,住户名称 from 住户资料 
        where id=(select MAX(id) from 住户资料 where 住户资料.住户名称=b.住户名称))a
     where  b.住户编号=['+@bmc+'].住户编号 and a.住户名称=b.住户名称 and ['+@bmc+']<>''住户资料'''  
      

  3.   


    而且不应该用where 而是要用and
      

  4.   


    而且不应该用where 而是要用and
    不对啊,我把这个 where ['+@bmc+']<>''住户资料'''  删了还是不行,果然还是别名引用出错了
      

  5.   


    而且不应该用where 而是要用and
    现在重新弄了一下,用2个游标嵌套来实现,但运行时提示游标已打开
    Declare @bmc nvarchar(200)
    Declare @zdmc nvarchar(100)
    Declare @zhmc nvarchar(100)
    Declare @sql nvarchar(1000)
    Declare Cur Cursor For
    select A.[name] as 表名称,B.name as 字段名称 from sysobjects A 
    inner join syscolumns B on A.id=B.id where B.[name]='住户编号'
     and A.xtype='U' and left(a.name,1)<>'_' and left(a.name,3)<>'tmp'
     and left(a.name,4)<>'AYHS'
     Declare Cur2 Cursor For
     select 住户名称 from 住户资料 
    Open Cur
    Fetch next From Cur Into @bmc,@zdmc
    while @@FETCH_STATUS =0
    Open Cur2
    Fetch next From Cur2 Into @zhmc
    begin
    set @sql='
       update  ['+@bmc+'] set 住户编号=a.住户编号 from  ['+@bmc+']
       inner join zhzl b on b.住户编号= ['+@bmc+'].住户编号
       inner join (select 住户编号,住户名称 from 住户资料 
       where 住户资料.id=(select MAX(住户资料.id) from 住户资料 inner join zhzl on zhzl.住户名称=住户资料.住户名称
       where 住户资料.住户名称=['+@zhmc+'] ))a
       on a.住户名称=b.住户名称 '
    exec(@sql) 
    Fetch next From Cur Into @bmc,@zdmc
    Fetch next From Cur2 Into @zhmc
    end
    Close Cur2
    Deallocate Cur2
    Close Cur
    Deallocate Cur
      

  6.   

    try this, ' update ['+@bmc+'] set 住户编号=a.住户编号 from ['+@bmc+']
       inner join (select 住户编号,住户名称 from 住户资料) b on b.住户编号=['+@bmc+'].住户编号
       inner join (select 住户编号,住户名称,
                          row_number() over(partition by 住户名称 order by id desc) ''rn'' 
                   from 住户资料) a on a.住户名称=b.住户名称 and a.rn=1
       where ['+@bmc+']<>''住户资料'''
      

  7.   

    就是在住户资料表里边,有住户名称,住户编号两列,住户编号是该住户的唯一标示,任何一个住户都只有一个编号.但录入资料的时候,发现即使是同一个住户,也录上了多个编号,因此需要把各住户最大值的编号拿来统一更新其他含有住户编号列的数据表,所以才用以上语句写出狗屁不搭的东西,望帮助啊.
    create table #user(id int  ,name varchar(100))
    insert into #user (id,name) values(1,'a'),(2,'b') ,(3,'c'),(4,'a'),(5,'c')select * from #userupdate #user set id = b.id
    from (select max(id) id ,name from #user group by name) b 
    where #user.name = b.nameselect * from #user
    drop table #user/**
    id name
    1 a
    2 b
    3 c
    4 a
    5 c
    --------------------------
    id name
    4 a
    2 b
    5 c
    4 a
    5 c
    **/
      

  8.   


    create table #user(id int  ,name varchar(100))
    insert into #user (id,name) values(1,'a'),(2,'b') ,(3,'c'),(4,'a'),(5,'c')update table1 set id = b.id2
    from (select a.id id1 ,b.id id2 
      from #user a
      join (select max(id) id ,name from #user group by name)b 
    on a.name = b.name and a.id <> b.id
    ) b where table1.id = b.id1
    drop table #user
      

  9.   


    而且不应该用where 而是要用and

     where ['+@bmc+']<>''住户资料'''这两个是表吧。不是需要具体表的列吗