Sql server 仅当父级在层次结构中处于活动状态时才激活子级

Sql server 仅当父级在层次结构中处于活动状态时才激活子级,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我使用表在sql中有一个部门的层次结构。我包括了部门的激活和停用功能 现在我想,如果有人想激活子对象,那么它的父对象应该被激活,否则它应该返回-11 我已经制定了一个程序,但它不适用于@Is_Active flag='Y',其中提供了该'Y',子项应通过该程序激活 -- Add the parameters for the stored procedure here ALTER PROCEDURE DepartmentSetStatus(@DEPARTMENT_ID nvarchar(10

我使用表在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
请告诉我如何才能达到预期的输出


提前谢谢

据我所知,类似这样的事情

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