A表
字段 A1,A2,A3,A4,A5,A6B表
字段 B1,B2,B3,B4,B5,B6当B表的 B6小于10 时 用A表里的 A1与A2数据(且A5不等于1)替换B表里 B1和B2(且B5不等于1),且将A表里A5字段和B表里B5字段值都修改为1,让其不参与下次更新A表和B表可能同时达到条件的有多行数据,我希望是顺序替换,当然还有一个A表和B表达到条件记录数不同,这个希望以最小的一个表的记录数为准

解决方案 »

  1.   

    create proc proc_test
    as
    set nocount onupdate B
    set B1=A1,B2=A2,B5=1
    FROM B 
    INNER JOIN (SELECT * FROM (select *,rn=ROW_NUMBER() OVER(PARTITION BY A1+A2 ORDER BY A1+A2) FROM A)T WHERE RN=1)A ON A.id=B.id 
    where B6<10 and A.A5<>1 and B.B5<>1
    update A
    set A5=1
    FROM B 
    INNER JOIN A ON A.id=B.id 
    where B6<10 and A.A5<>1 and B.B5=1GO还有,A表和B表它们之间是否是父子表关系?什么情况下存在一对多
      

  2.   

    用的sql2005 没有条件关联,我要条件就是将A表里A5不等于1的记录,取出来字段A1和A2,按顺序替换 B表里B1和B2且 B6小于10,且B5不等于1,替换完成将A表里的A5字段修改1,B5也修改为1,以便下次不参与替换
      

  3.   

    A.id=B.id 没有这个条件关联的
      

  4.   

    create proc proc_test
    as 
    set nocount on update B
    set B1=t.A1,B2=t.A2,B5=1
    from B
    inner join 
    (select B.主键,a.A1,a.A2
    from (select *,rn=ROW_NUMBER() OVER(ORDER BY 主键) from A where A5<>1)a
    inner join (select *,rn=ROW_NUMBER() OVER(ORDER BY 主键) from B where B5<>1 and B6<10)b
    on a.rn=b.rn
    )t on B.主键=t.主键
    update A
    set A5=1
    from A
    inner join 
    (select A.主键
    from (select *,rn=ROW_NUMBER() OVER(ORDER BY 主键) from A where A5<>1)a
    inner join (select *,rn=ROW_NUMBER() OVER(ORDER BY 主键) from B where B5<>1 and B6<10)b
    on a.rn=b.rn
    )t on B.主键=t.主键go