我正在研究这个嵌套游标。我在 major_cursor 中的更新语句没有更新表。我知道所有的循环都在工作,因为打印语句打印了预期的内容,但 edu_suffix_stage_test 中没有任何更新。我希望有人有一个建议!
对于每个 id,都有一个专业的数据行,以及获得该学位的年份。我需要把它们串起来。
例如 REID 10013 有两个记录两个学位:
'38 年的土木工程和 '41 年的土木工程。
我需要构建 edusuffix,使其等于“Civil Engineering'38,Civil Engineering in '41”。最后,我在 edu_suffix_stage_test 中每个 reid 需要一个 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