2

SQL Server 2008

とりわけ2つのフィールドを持つテーブルがあります
TableA
alterid uniqueidentifier
revnum varchar(50)

別のテーブルには、最初のテーブルとまったく同じフィールドがあります
。 TableB
alterid uniqueidentifier
revnum varchar(50)

revnumフィールドを比較して確認したい。TableA の各レコードについて、TableB にレコードがあるかどうかを確認します。それが存在し、revnum フィールドが異なる場合は、TableB.revnum を TebleA.revnum に更新します。存在しない場合は、TableA のレコードを TableB に追加します。

ここにコードがあります

    BEGIN
    SET @Prod_curs =CURSOR FOR SELECT s.alterid, s.revnum, r.revnum FROM TableA s LEFT OUTER JOIN
                                TableB r ON s.alterid=r.alterid 
                                WHERE s.revnum<>r.revnum OR r.revnum IS NULL

    OPEN @Prod_curs
    FETCH NEXT FROM @Prod_curs INTO @alterid, @srevnum, @rrevnum

    WHILE @@FETCH_STATUS=0
        BEGIN                           


            IF @rrevnum IS NULL
                BEGIN                                           
                    INSERT INTO TableB (alterid,revnum) VALUES (@alterid,ISNULL(@srevnum,0))

                END
            IF @srevnum<>@rrevnum 
                BEGIN           
                    UPDATE TableB SET revnum=@srevnum WHERE alterid=@alterid    

                END         

            FETCH NEXT FROM @Prod_curs INTO @alterid, @srevnum, @rrevnum        
        END

        CLOSE @Prod_curs;
        DEALLOCATE @Prod_curs;
END

私のコードは、奇妙なことが起こる一部のレコードを除いて、約 15000 レコードのセットで正常に動作します。

TableA には、このレコードの
alterid revnum
'A770B280-B4DA-4937-9046-B24E60259AB6' '2-414922-1--1-1-2-51-0' があります。

TableB に格納されている場合、値は
alterid revnum
'BF18A0EB-A684-486B-B053-55BC2969F1E3' '2-414922-1--1-1-2-51-0' です。

何らかの理由でオルタイドが変更され、その理由がわかりません。

誰か助けてくれませんか

4

1 に答える 1