0

このネストされたカーソルに取り組んでいます。major_cursor の update ステートメントがテーブルを更新していません。print ステートメントが期待どおりに出力されるため、すべてのループが機能していることはわかっていますが、edu_suffix_stage_test では何も更新されていません。誰かに提案があることを願っています!

idごとに、専攻と学位取得年度のデータが並んでいます。それらをつなぎ合わせる必要があります。

たとえば、REID 10013 には 2 度のレコードが 2 つあります。

38年土木、41年土木。

「Civil Engineering'38, Civil Engineering in '41」と同じになるように edusuffix を作成する必要があります。最後に、edu_suffix_stage_test でリードごとに 1 つの edusuffix が必要です。

ありがとう。

これが私のコードです:

DECLARE @reid_outside nvarchar(20), @major nvarchar(50), @classof nvarchar(5),
 @edusuffix_inside varchar(80), @note nvarchar(50), @reid_inside nvarchar(20),
@edusuffix_outside varchar(80)


DECLARE education_cursor CURSOR FOR 
SELECT  reid, edusuffix
FROM edu_suffix_stage_test
where reid < 1005
--ORDER BY reid

OPEN education_cursor

FETCH NEXT FROM education_cursor 
INTO @reid_outside, @edusuffix_outside

WHILE @@FETCH_STATUS = 0
BEGIN

    SELECT @note = 'building edusuffix for ' 
    PRINT @note
    PRINT @reid_outside

    -- Declare an inner cursor based   
    -- on reid from the outer cursor.

    DECLARE major_cursor CURSOR FOR 
    SELECT v.reid, 
    v.EduMajor, v.EduClassOF
    FROM  re_education v
   WHERE v.REID = @reid_outside  -- Variable value from the outer cursor 
--order by v.REID 
FOR UPDATE of edusuffix


    OPEN major_cursor
    FETCH NEXT FROM major_cursor INTO @reid_inside, @major, @classof

    WHILE @@FETCH_STATUS = 0
    BEGIN

        SELECT @edusuffix_inside = @major +' '+ @classof +', '
        PRINT @edusuffix_inside

    update edu_suffix_stage_test
    set edusuffix = case when @edusuffix_outside = null then ''+ @edusuffix_inside 
            else @edusuffix_outside + ', '+@edusuffix_inside end
    from edu_suffix_stage_test a
where  -- a.reid = @reid_inside
current of education_cursor
Print ' updated edusuffix'

        FETCH NEXT FROM major_cursor INTO @reid_inside, @major, @classof
        END

    CLOSE major_cursor
    DEALLOCATE major_cursor

    FETCH NEXT FROM education_cursor 
    INTO @reid_outside, @edusuffix_outside
END 
CLOSE education_cursor
DEALLOCATE education_cursor
4

1 に答える 1

0

実際、カーソルに問題はありません。更新ステートメントに誤りがあります。何を考えていたのかわかりません。そのようにnullを比較してもうまくいきません。私もより良いケースステートメントに取り組んでおり、isnull() を使用します。完成したら投稿します。

于 2012-11-02T17:11:32.557 に答える