有两张表,A和B,分别人两个字段Q和W
例:
A表的结构:
Q    W
1    OE
2    IE
3    OL
4    MD
5    HG
B表的结构:
Q     W
1    NULL
2    NULL
如何用游标实现以下要求:
如果A表中的Q=B表中的Q,那么把A中的W信息更新B表中的W,如果A中的Q不等于B中的Q的,那么就把A表中的Q和W都添加到B表中的Q和W

解决方案 »

  1.   

    --不用游标create table #A(q int,w varchar(100))
    create table #B(q int,w varchar(100))insert into #A(q,w)
    select 1,'OE' union all
    select 2,'IE' union all
    select 3,'OL' union all
    select 4,'MD' union all
    select 5,'HG'insert into #b(q,w)
    select 1,NULL union all
    select 2,NULLselect * from #a
    select * from #bupdate #b set w=#a.w
    from #a inner join #b on #a.q=#b.qinsert into #b(q,w)
    select #a.q,#a.w
    from #a left join #b on #a.q=#b.q
    where #b.q is nullselect * from #a
    select * from #bdrop table #a,#b
      

  2.   

    DECLARE @Q int,@W varchar(10)
    DECLARE cur CURSOR FOR SELECT Q,W FROM A
    OPEN cur
    FETCH NEXT FROM cur INTO @Q,@W
    WHILE (@@fetch_status <> -1)
    BEGIN
    IF (@@fetch_status <> -2)
    BEGIN
    UPDATE B SET W=@W WHERE Q=@Q
    IF @@ROWCOUNT=0
    INSERT B(Q,W) VALUES(@Q,@W)
    END
    FETCH NEXT FROM cur INTO @Q,@W
    END
    CLOSE cur
    DEALLOCATE cur其实可不用游标来实现:
    UPDATE B SET W=A.W FROM B JOIN A ON B.Q=A.Q
    INSERT B(Q,W) SELECT Q,W FROM A WHERE NOT EXISTS(SELECT * FROM B WHERE B.Q=A.Q)
      

  3.   

    可以不用游标declare @A  table (A int,W varchar(10))
    insert into @A select 1 ,   'OE'
    insert into @A select 2 ,   'IE'
    insert into @A select 3  ,  'OL'
    insert into @A select 4  ,  'MD'
    insert into @A select 5  ,  'HG'declare @B table  (Q int ,W varchar(10))
    insert into @B select 1 ,   ''
    insert into @B select 2 ,   ''
    update b set b.W=a.W from @B as b , @A as a where a.A=b.Q
    select * from @B结果1 OE
    2 IE