0

我正在研究这个嵌套游标。我在 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
4

1 回答 1

0

实际上游标没有任何问题。我的更新声明有问题!我不知道我在想什么,以这种方式比较 null 是行不通的。我也在研究更好的 case 语句,并将使用 isnull()。完成后我会发布它。

于 2012-11-02T17:11:32.557 回答