Sql server 仅当父级在层次结构中处于活动状态时才激活子级
我使用表在sql中有一个部门的层次结构。我包括了部门的激活和停用功能 现在我想,如果有人想激活子对象,那么它的父对象应该被激活,否则它应该返回-11 我已经制定了一个程序,但它不适用于@Is_Active flag='Y',其中提供了该'Y',子项应通过该程序激活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
-- 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