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