In this post we create a parent child hierarchy (n level) from a delimited string like [Parent_Child_LeafChild].
What we are looking for is taking a n length string like "Stage1_Stage2_Stage3" and moving it into a table to build this:
What we are looking for is taking a n length string like "Stage1_Stage2_Stage3" and moving it into a table to build this:
Stage1
--Stage2
----Stage3
DECLARE @separator_position INT
-- This is used to locate each separator character
DECLARE @array_value VARCHAR(1000)-- this holds each array value as it is returned
DECLARE @separator char(1) --Used in WHERE clause
declare @StageLevel varchar(255) = 'Stage1_Stage2_Stage3'
declare @holder varchar(255) = @stagelevel
SET @separator = '_' --Separator A.K.A.
Delimiter
SET @StageLevel = @StageLevel + @separator --append ',' at
the end
-- select
PATINDEX('%[' + @separator + ']%', @StageLevel)
Declare @Level int = 0
Declare @ParentId int
WHILE PATINDEX('%[' + @separator + ']%', @StageLevel) <> 0
BEGIN -- patindex
matches the a pattern against a string
SELECT @separator_position
= PATINDEX('%[' + @separator + ']%',@StageLevel)
SELECT @array_value
= LEFT(@StageLevel, @separator_position -
1)
set @level
= @level +1
--select @array_value, @level
IF @level =1 --This is parent node
Begin
insert into Hierarchy (StageLevelName, StageLevel)
values (@array_value, @Level)
END
ELSE
BEGIN
insert into Hierarchy (StageLevelName, StageLevel, ParentID)
values (@array_value, @Level, @ParentId)
END
set @ParentId = @@IDENTITY
select @ParentId
--Moving to end of array
SELECT @StageLevel
= STUFF( @StageLevel, 1, @separator_position, '')
END
The end result will be a table with each row as a recursive hierarchy. Plus it has level information for depth.
No comments:
Post a Comment