2014-10-13 32 views
0

我使用table在sql中擁有部門級別結構。我已包含激活功能&取消激活部門。僅當父級在層次結構中處於活動狀態時才激活子級

現在我想如果有人想激活孩子,那麼它的父母應該被激活,否則它應該返回-11。

我已經做了一個程序,但它不爲@Is_Active flag ='Y'工作,如果提供了這個'Y',那麼應該通過程序來激活孩子。

-- Add the parameters for the stored procedure here 
ALTER PROCEDURE DepartmentSetStatus(@DEPARTMENT_ID nvarchar(1000), @Is_Active char(1)) 

--[DepartmentSetStatus] "1",'Y' 

AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 

-- interfering with SELECT statements. 
declare @count int 

SET NOCOUNT OFF; 


if @Is_Active='Y' 
begin 


WITH Vals1 AS ( 
    SELECT * 
    FROM [I_DEPARTMENT] 
    WHERE DEPARTMENT_ID in (select Data from dbo.Split(@DEPARTMENT_ID,',')) 

    UNION ALL 
    SELECT t1.* 
    FROM [I_DEPARTMENT] t1 INNER JOIN 
    Vals1 v ON t1.DEPARTMENT_ID = v.PARENT_ID 

) 

select @count=count(*) from Vals1 where is_active = 'N' 

if @count>0 
begin 


    RETURN -11 

end 

    end 

; 

    WITH Vals AS ( 
    SELECT * 
    FROM [I_DEPARTMENT] 
    WHERE DEPARTMENT_ID in (select Data from dbo.Split(@DEPARTMENT_ID,',')) 
    UNION ALL 
    SELECT t1.* 
    FROM [I_DEPARTMENT] t1 INNER JOIN 
    Vals v ON t1.PARENT_ID = v.DEPARTMENT_ID 
    ) 


    UPDATE I_Department 
    SET Is_Active= @Is_Active  
    WHERE DEPARTMENT_ID IN (select DEPARTMENT_ID from Vals) 



    END 

請建議我如何實現所需的輸出。

在此先感謝

回答

0

這就是我所瞭解的東西。

SELECT @DepartmentID = DepartmentID FROM Child_Departments WHERE Child_ID = @Child_ID 

IF (@DepartmentID IS NULL OR @DepartmentID = '') 
BEGIN 
    PRINT 'The child id does not have DepartmentID' 
    RETURN 
END 

SELECT @Is_Active = Is_Active FROM Departments WHERE DepartmentID = @DepartmentID 

IF @Is_Active = 'Yes' 

UPDATE Child_Departments 
SET Is_Active = 'Yes' 
WHERE Child_ID = @Child_ID 
相關問題