Мне нужно получить иерархию некоторых проектов во временной таблице, потому что проект, для которого создана иерархия, зависит от триггера после обновления.Поэтому мне нужно вставить результат хранимой процедуры во временную таблицу.После этого мне нужен курсор, чтобы зациклить все результаты и после этого сделать некоторые обновления.Вот мой код ... Я не знаю почему, но он не входит в цикл, или я так думаю.
ALTER PROCEDURE [dbo].[UPDATE_UDF_VALUES_HIERARCHY] (
@proj_id INT
)
AS
BEGIN
DECLARE @tmpHierarchy TABLE (
proj_id INT ,
parent_wbs_id INT
);
DECLARE @projid INT , @parent_wbs_id INT , @Total INT , @Totaltest INT;
INSERT INTO @tmpHierarchy ( proj_id , parent_wbs_id
)
EXEC GetHierarchyForProject @proj_id;
--INSERT INTO @tmpHierarchy
--Exec GetHierarchyForProject @proj_id
-- to break the match in all scanora
UPDATE udfvalue
SET udf_number = ( SELECT SUM(udf_number)
FROM UDFVALUE
WHERE udf_type_id = 1
AND
proj_id = @proj_id
)
WHERE udf_type_id = 2
AND
proj_id = @proj_id;
DECLARE db_cursor_hierarchy_andreea CURSOR
FOR SELECT *
FROM @tmpHierarchy;
OPEN db_cursor_hierarchy_andreea;
FETCH NEXT FROM db_cursor_hierarchy_andreea INTO @projid , @parent_wbs_id;
IF @proj_id != @projid
BEGIN
IF EXISTS ( SELECT proj_id
FROM udfvalue
WHERE proj_id = @projid
AND
udf_type_id = 2
)
BEGIN
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Totaltest = SUM(udf_number)
FROM udfvalue
WHERE udf_type_id = 2
AND
fk_id IN ( SELECT proj_id
FROM PROJWBS
WHERE parent_wbs_id = ( SELECT wbs_id
FROM projwbs
WHERE proj_id = @projid
)
);
UPDATE udfvalue
SET udf_number = @Totaltest
WHERE udf_type_id = 2
AND
proj_id = @projid;
END;
END;
FETCH NEXT FROM db_cursor_hierarchy_andreea INTO @projid , @parent_wbs_id;
END;
CLOSE db_cursor_hierarchy_andreea;
DEALLOCATE db_cursor_hierarchy_andreea;
END;