このネストされたカーソルに取り組んでいます。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