我正在处理这个嵌套的游标。我在major_cursor中的update语句没有更新表。我知道所有的循环都在工作,因为print语句打印expect,但edu_suffix_stage_test中没有任何更新。我希望有人能给我一个建议!
对于每个id,都有一行关于专业的数据,以及获得该学位的年份。我需要把它们串在一起。
例如,REID 10013有两个两个学位的记录:
土木工程在38年,土木工程在41年。
我需要建立的edusuffix,所以它等于“土木工程‘38,土木工程在'41”。我需要每个reid在最后一个edusuffix,在edu_suffix_stage_test。
谢谢。
下面是我的代码:
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发布于 2012-11-03 01:11:33
实际上,游标没有任何问题。我的update语句有错误!我不知道我在想什么,那样比较null是行不通的。我也在编写一个更好的case语句,并将使用isnull()。当我写完的时候我会把它贴出来。
https://stackoverflow.com/questions/13186039
复制相似问题