fnWillCreateCyclicConditionalContent

Return

Return Type
int

Parameters

Parameter Parameter Type Mode Description
@ConditionBlockID int IN
@ParentConditionID int IN

Definition

Copy


            CREATE FUNCTION [dbo].[fnWillCreateCyclicConditionalContent]
            (
                @ConditionBlockID int,
                @ParentConditionID int
            )
            RETURNS int
            AS
            BEGIN
                DECLARE @n int;

                WITH [ConditionBlockAncestors]([ConditionBlockID], [ParentConditionID]) AS
                (
                    -- Find self
                    SELECT cbc.[ConditionBlockID], cbc.[ConditionID]
                        FROM [dbo].[ConditionBlockCondition] cbc
                    WHERE cbc.[ConditionBlockID] = @ConditionBlockID
                        AND    cbc.[ConditionID] = @ParentConditionID

                    UNION ALL

                    -- Find first parent
                    SELECT cbpc.[ConditionBlockID], cbpc.[ParentConditionID]
                        FROM [dbo].[ConditionBlockCondition] cbc
                    INNER JOIN [dbo].[ConditionBlockParentCondition] cbpc
                        ON cbc.[ConditionBlockID] = cbpc.[ConditionBlockID]
                    WHERE cbc.[ConditionID] = @ParentConditionID

                    UNION ALL

                    -- Recurse ancestors
                    SELECT cbc.[ConditionBlockID], cbpc.[ParentConditionID]
                        FROM [ConditionBlockAncestors] cba
                    INNER JOIN [dbo].[ConditionBlockCondition] cbc
                        ON cba.[ParentConditionID] = cbc.[ConditionID]
                    INNER JOIN [dbo].[ConditionBlockParentCondition] cbpc
                        ON cbc.[ConditionBlockID] = cbpc.[ConditionBlockID]
                )SELECT @n = Count(cbc.[ConditionBlockID]) FROM [ConditionBlockAncestors] cba
                    INNER JOIN [dbo].[ConditionBlockCondition] cbc
                        ON cba.[ParentConditionID] = cbc.[ConditionID]
                    WHERE cbc.[ConditionBlockID] = @ConditionBlockID
                    OPTION (MAXRECURSION 100) -- Default MAXRECURSION is 100

                RETURN @n
            END