2012-11-01 6 views
0

이 중첩 커서로 작업하고 있습니다. major_cursor의 내 update 문이 테이블을 업데이트하지 않습니다. print 문이 예상했던대로 인쇄하기 때문에 모든 루핑이 작동하고 있지만 edu_suffix_stage_test에서는 업데이트되는 것이 없습니다. 나는 어떤 사람이 제안을하기를 바라고있다.중첩 커서, 코드는 커서 외부의 테이블을 업데이트하지 않습니다.

각 ID에는 전공에 대한 데이터 행이 있고 그 학위가 획득 된 연도가 있습니다. 나는 그들을 함께 끈으로 묶을 필요가있다.

'38, 에서 토목 공학 및 '41에서 토목 공학 : 예를 들어, REID의 10013에 대한

는 2 개도에 대한 두 개의 레코드가 있습니다.

edusuffix를 빌드해야 'Civil Engineering'38,'41 '의 토목 엔지니어링과 같아야합니다. edu_suffix_stage_test에서 리드마다 하나의 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 + ', '[email protected]_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 
+0

나는 업데이트 할 수있는 커서를 사용한 적이 없기 때문에 잘못된 것일 수 있습니다.하지만 'FORUSED EDUSFIX'가 첫 번째 (바깥 쪽) 커서의 일부가 아니어야합니까? 또한 내부 루프 ('major_cursor' 루프)에서'edu_suffix_stage_test'를 갱신하고 있습니다. 이것은 같은 edu_suffix_stage_test 행을 두 번 이상 업데이트 할 수 있음을 의미합니다 (조건은'current of education_cursor'와'education_cursor '내부 루프에있는 동안 움직이지 않는다.) - 의도적으로 설계된 것인가? –

답변

0

:

여기 내 코드입니다. 내 업데이트 성명이 잘못되었습니다! 나는 무엇을 생각하고 있었는지 모르겠다. null을 비교해도 효과가 없다. 나는 더 나은 case 문에 대해서도 일하고 ​​있으며 isnull()을 사용할 것이다. 내가 끝나면 게시 할 것입니다.

+0

다음은 작동하는 코드입니다. – user1792665