两个表,我需要用一个表去更新另外一个表,但是两个表的结构不一样,
slzk_gk_spbmk_mod中字段如下:xgzd,yz,xz,sfzh
slzk_gk_spbmk中部分字段如下:sfzh,xm,zzmm,yjdz...
slzk_gk_spbmk_mod中的xgzd存储的时要在slzk_gk_spbmk中修改的字段,比如xgzd=xm,xz是要更新后的值,yz是更新前的值,例如:
slzk_gk_spbmk_mod
xgzd  yz    xz    sfzh
xm   张三  张四  513901199406180240
slzk_gk_spbmk
sfzh                xm      zzmm      yjdz
513901199406180240  张三  共青团员   四川成都
更新后:
sfzh                xm      zzmm      yjdz
513901199406180240  张四  共青团员   四川成都
我写的如下,始终不对,麻烦各位给个方法:
use slzk_zk
declare MyCur cursor
for select xgzd,xz,sfzh from slzk_gk_spbmk_mod
open Mycur
declare @spbmk_zd char(10)
declare @spbmk_xz char(254)
declare @spbmk_sfzh char(18)
fetch from Mycur into @spbmk_zd,@spbmk_xz,@spbmk_sfzh
while @@fetch_status=0
begin
  Set @spbmk_zd=replace(@spbmk_zd,' ','')
  print @spbmk_zd print @spbmk_sfzh
  update slzk_gk_spbmk set @spbmk_zd=@spbmk_xz where sfzh=@spbmk_sfzh
  fetch next from Mycur into @spbmk_zd,@spbmk_xz,@spbmk_sfzh
end
close Mycur
deallocate Mycur

解决方案 »

  1.   

    你的意思是不是就是根據兩個表的身份證號關聯,用slzk_gk_spbmk_mod表的xz去更新slzk_gk_spbmk表的xm嘛,不用遊標就可以.直接寫update slzk_gk_spbmk
    set xm=repalce(a.xz,' ','')
    from slzk_gk_spbmk_mod as a,slzk_gk_spbmk as b
    where a.sfzh=b.sfzh
      

  2.   

    不是的,你意思理解错了,我过程是对的,只是细节有问题,修改成这样就对了:
    use slzk_zk
    declare MyCur cursor----申明游标
    for select xgzd,xz,sfzh from slzk_gk_spbmk_mod --将表中数据导入游标
    open Mycur--打开游标
    declare @spbmk_zd char(10)
    declare @spbmk_xz char(254)
    declare @spbmk_sfzh char(18)
    fetch from Mycur into @spbmk_zd,@spbmk_xz,@spbmk_sfzh--将游标数据载入申明的变量
    while @@fetch_status=0
    begin
      --Set @spbmk_zd=replace(@spbmk_zd,' ','')
      exec('update slzk_gk_spbmk set ['+@spbmk_zd+']='''+@spbmk_xz+''' where sfzh='''+@spbmk_sfzh+'''')
      --修改数据
      if(@@error<>0 or @@rowcount=0)
       begin
         print @spbmk_sfzh
         print @spbmk_zd
       end
      --出错打印身份证号和修改字段
      fetch next from Mycur into @spbmk_zd,@spbmk_xz,@spbmk_sfzh
      --下一条数据
    end
    close Mycur --关闭游标
    deallocate Mycur--释放游标
    没有人回复,分全部给你算了。